[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
подскажите с диалогами
NaomДата: Понедельник, 23 Июня 2008, 17:54 | Сообщение # 1
Начинающий
Группа: Пользователи
Сообщений: 22
Награды: 0
Замечания: 0%
Статус:
Люди подскажите как луче и как надо создать диалоги типа 2д игр (когда рисунок перса слева, а справа текст по буквам выводиться)

вообщем у как у меня:

загружаю файл, в нем 001<Текст>, где, все до "<" - ИД по которому определяю чей это текст (нпс или перса), далее с помошью команды mid я по буквам вывожу мой текст, но появляецца проблема, когда текст слишком длиный, надо чтоб в определенном моменте когда выводиться текст, прыгал на новую строчку... как это сделать если юзаю text x,y,txt?

 
NaomДата: Понедельник, 23 Июня 2008, 18:28 | Сообщение # 2
Начинающий
Группа: Пользователи
Сообщений: 22
Награды: 0
Замечания: 0%
Статус:
чтот я тебя не понял, а len зачем тогда? =)

я юзаю:

Code

for i=1 to len(my_text$)
vivod_texta$=mid(my_text$,1,i)
next

text 10,10,vivod_texta$

допустим мой текст - 50 символов, а текст выводит на экран макс на одной линии 30 симв, то по моим соображениям должно быть примерно где-то так:

Code

for i=1 to len(my_text$)
if i<30 then
vivod_texta$=mid(my_text$,1,i)
else
тут хз че писать... ступарюсь на этом месте...
endif
next

text 10,10,vivod_texta$


Сообщение отредактировал Naom - Понедельник, 23 Июня 2008, 18:29
 
NaomДата: Понедельник, 23 Июня 2008, 19:00 | Сообщение # 3
Начинающий
Группа: Пользователи
Сообщений: 22
Награды: 0
Замечания: 0%
Статус:
мм вы меня не поняли.. как сделать так, автоматизировалося функция... в коде чтоб писал...

if pos_x_pl=xn then
if keyhit(28) then
event(001)
endif
endif

function event(ev)
if ev=100 then
text 100,100,"sadasd"
endif
end function

типо того

чтоб автоматом переходила на новую строку

Сообщение отредактировал Naom - Понедельник, 23 Июня 2008, 19:00
 
NaomДата: Вторник, 24 Июня 2008, 12:25 | Сообщение # 4
Начинающий
Группа: Пользователи
Сообщений: 22
Награды: 0
Замечания: 0%
Статус:
HolyDel,
спасибо за код =) но получаецца как-то не красиво..

Code

Graphics3D 800,600,0,2
SetBuffer BackBuffer()

c=CreateCamera()

Txt$=""

MoveMouse 300,240
While Not KeyDown(1)

UpdateWorld
RenderWorld

If KeyDown(28) Then
i=i+1
EndIf

If i<5 Then
  i=i+1
Else
  txt$=txt$+0
  i=0
EndIf
   

w=MouseX()-200
If w>10
  Color 25,25,25
  Rect(200,100,w,400)
  Color 250,250,250
  WrapText(txt$,200,100,w,0)
EndIf

Flip

Wend

Function WrapText(txt$,x,y,width,align=0)

  If StringWidth(txt)>width
   
   b=1
   e=1
   c_s = StringWidth("!!!");
   While e<Len(txt)
    e=e+1
    If  StringWidth(Mid(txt,b,e-b+1))>width-c_s Or Asc(Mid(txt,e,1))=13
     If Asc(Mid(txt,e,1))=13 Then e=e-1
     Text x+(width/2)*align,y,Mid(txt,b,e-b+1),align
     y=y+StringHeight("!")+2
     If Asc(Mid(txt,e+1,1))=13 Then e=e+2
     b=e
    EndIf
   Wend
    
  Else
    
   Text(x+(width/2)*align,y,txt$,align)
    
  EndIf

   
End Function

попробуй этот код, и увидишь, когда доходит до края... текст дальше по буквам не появляетья, +резко выводиться в случае если вторая строка снова доходит до края

 
Robat64Дата: Вторник, 24 Июня 2008, 13:22 | Сообщение # 5
Продвинутый
Группа: Участники
Сообщений: 153
Награды: 0
Замечания: 20%
Статус:
Code
Graphics3D 800,600,0,2
SetBuffer BackBuffer()

c=CreateCamera()

Txt$=""

MoveMouse 300,240
While Not KeyDown(1)

UpdateWorld
RenderWorld

If KeyDown(28) Then
i=i+1
EndIf

If i<5 Then
   i=i+1
Else
   txt$=txt$+0
   i=0
EndIf
     

w=MouseX()-200
If w>10
   Color 25,25,25
   Rect(200,100,w,400)
   Color 250,250,250
   WrapText(txt$,200,100,w,0)
EndIf

Flip 0

Wend

Function WrapText(txt$,x,y,width,align=0)

   If StringWidth(txt)>width
    txt$=txt$+0+Chr(13)
    b=1
    e=1
    c_s = StringWidth("!!!");
    While e<Len(txt)
     e=e+1
     If  StringWidth(Mid(txt,b,e-b+1))>width-c_s Or Asc(Mid(txt,e,1))=13
      If Asc(Mid(txt,e,1))=13 Then e=e-1
      Text x+(width/2)*align,y,Mid(txt,b,e-b+1),align
      y=y+StringHeight("!")+2
      If Asc(Mid(txt,e+1,1))=13 Then e=e+2
      b=e
     EndIf
    Wend
      
   Else
      
    Text(x+(width/2)*align,y,txt$,align)
      
   EndIf

     
End Function

Вот так


 
NaomДата: Вторник, 24 Июня 2008, 13:50 | Сообщение # 6
Начинающий
Группа: Пользователи
Сообщений: 22
Награды: 0
Замечания: 0%
Статус:
оо спасибо!! теперь работает так как мне нада =))))) smile
 
Robat64Дата: Вторник, 24 Июня 2008, 14:55 | Сообщение # 7
Продвинутый
Группа: Участники
Сообщений: 153
Награды: 0
Замечания: 20%
Статус:
biggrin

 
NaomДата: Вторник, 24 Июня 2008, 15:57 | Сообщение # 8
Начинающий
Группа: Пользователи
Сообщений: 22
Награды: 0
Замечания: 0%
Статус:
Вот что у меня получилось =)) типа скрипты:

Code

Graphics3D 800,600,0,2   
SetBuffer BackBuffer()   

fntArialB=LoadFont("Arial Cyr",18,True)   
SetFont fntArialB   

c=CreateCamera()   

Txt$=""   

Global l_txt$=" "
Global t_len,i,txt1$,n_sw$,pr$
Global ev_switch=0

n_sw$="T01"

MoveMouse 300,240   
While Not KeyDown(1)   

UpdateWorld   
RenderWorld   

Color 50,50,50
Rect 200,100,300,100

Color 255,255,255

If ev_switch=1 Then
   event(n_sw$)
Else
   clear()
EndIf

If KeyHit(28) Then    
   If ev_switch=0 ev_switch=1
EndIf   

If KeyDown(28) And ev_switch=1 Then
   i=i+2
EndIf

Text 0,0,pr$

Flip    

Wend   

Function clear()
   t_len=0
   txt1$=""
End Function

Function event(n_ev$)
     
   filein = ReadFile("1.txt")   

   While Not Eof(filein)   
    ll$= ReadLine$( filein )
    If Left(ll$,3)=n_ev$ Then
     If Right(ll$,3)="END" ev_switch=0
     l_txt$=Mid(ll$,5,Len(ll$)-8)
     pr$=Right(ll$,3)
    EndIf
   Wend   
     
   CloseFile(filein)   

   If t_len<Len(l_txt$) Then
    If i<5 Then   
        i=i+1   
    Else   
     t_len=t_len+1
        txt1$=txt1$+Mid(l_txt$,t_len,1)
        i=0   
    EndIf
   EndIf   
     
   If t_len=>Len(l_txt$)
    If KeyHit(28) Then
     n_sw$=pr$
     clear()   
    EndIf   
   EndIf
     
   WrapText(txt1$,200,100,300,0)

End Function

Function WrapText(txt$,x,y,width,align=0)   

     If StringWidth(txt)>width   
       txt$=txt$+Chr(13)   
      b=1   
       e=1   
       c_s = StringWidth("!!!");   
       While e<Len(txt)   
         e=e+1   
         If  StringWidth(Mid(txt,b,e-b+1))>width-c_s Or Asc(Mid(txt,e,1))=13   
           If Asc(Mid(txt,e,1))=13 Then e=e-1   
           Text x+(width/2)*align,y,Mid(txt,b,e-b+1),align   
           y=y+StringHeight("!")+2   
           If Asc(Mid(txt,e+1,1))=13 Then e=e+2   
           b=e   
         EndIf   
       Wend   
          
     Else   
          
       Text(x+(width/2)*align,y,txt$,align)   
          
     EndIf   
      
End Function

в 1.тхт обязательно должен присутствовать:
000< >END

что у мя в 1.тхт:
000< >END
T01<Кронос, скорее бежим пока нас не нашли и не убили!>T02
T02<Ау.. ты что неслышишь?>T03
T03<Кажись он уснул =(>000

т.е. конец диалога эт 000 =)
ща попытаюсь сделать такое ID@image@<text>@go_to_env

Сообщение отредактировал Naom - Вторник, 24 Июня 2008, 15:58
 
NaomДата: Вторник, 24 Июня 2008, 16:33 | Сообщение # 9
Начинающий
Группа: Пользователи
Сообщений: 22
Награды: 0
Замечания: 0%
Статус:
та я чет не могу разобраться в этом с++, простое 3д окно создать не могу cry не говоря уже об объектах типа куб =))
 
NaomДата: Вторник, 24 Июня 2008, 17:41 | Сообщение # 10
Начинающий
Группа: Пользователи
Сообщений: 22
Награды: 0
Замечания: 0%
Статус:
стоп, что достаточно написать такое?

Code

#include <iostream>
#include <sigel/ISigel.h>

using namespace std;

int main
{
sGAME //старт игры
{
  InitDemo(); //иницаилизация демки.  
  //в этом случае появляется окошко где можно выбрать
  //разрешение, глубину цввета и режим - полноэкранный или нет
   
  AppTitle("My First Program"); //Изменение заголовка окна на "My First Program"
  Font f("Tahoma",16,1); //Загружаем шрифт (тахома, размер - 16, полужирный)
  VWait(0); //отключаем вертикальную синхронизацию
   
  while(!KeyDown(VK_ESCAPE)) //пока не нажата ескейп
  {
   Render(); //рендерим мир
   f.Text(GetFPS(),20,20); //выводим фпс (тахомой 16)
   //GetFPS() - встроенная функция движка
   Flip(); //переключаем екраны
  }
  DeInit(); //обязательно удаляем все что насоздавали
}
}

?? я нуб в с++ =)

 
СтудентДата: Вторник, 24 Июня 2008, 17:53 | Сообщение # 11
Группа: Гости





Да. если поставлен sigel, то достаточно етого напсиать. Я пока примеры показываю а двиг в свободный доступ не кладу - ибо кривой он. в приват - пожалуйста.
 
NaomДата: Вторник, 24 Июня 2008, 18:04 | Сообщение # 12
Начинающий
Группа: Пользователи
Сообщений: 22
Награды: 0
Замечания: 0%
Статус:
HolyDel,
#include <iostream> это ж win32, использую MVisual Studio C++ 2005

Студент,
а как те в приват написать? =) не отказался б от такого двига =)

 
NaomДата: Среда, 25 Июня 2008, 12:22 | Сообщение # 13
Начинающий
Группа: Пользователи
Сообщений: 22
Награды: 0
Замечания: 0%
Статус:
Вот затестируйте, написал вторую версию своих диалогов =)) как по мне вроде кульно, ваше мнение? =))
Прикрепления: dialogs_v02.rar (473.6 Kb)


Сообщение отредактировал Naom - Среда, 25 Июня 2008, 12:57
 
ПрохожийДата: Среда, 25 Июня 2008, 16:58 | Сообщение # 14
Группа: Гости





Прикольно получилось, продолжай в том же духе!
 
  • Страница 1 из 1
  • 1
Поиск: