Skocz do zawartości

Jak zrobić textbox do intra gry


Cygnus

Rekomendowane odpowiedzi

No ja bym robił tak jakoś

Powiedzmy obiekt:ctrl_textbox;bez sprite;zaznaczony permanent (czy jakoś tak);dodajesz go do pierwszego roomu

I kod;

CREATE

GML
boxHeight=200;//do zmiany

boxPadding=10;//do zmiany

current_message=0;

curent_state=0;

messages[0][0]="";

messages[0][1]=0;

messages[1][0]="jakas kwestia";//tresc

messages[1][1]=2;//numer nastepnej kwestii

messages[2][0]="odpowiedz";

messages[2][1]=0;//i żeby skończyć

//tutaj sobie wpisz wszystkie kwestie z gry w takim formacie

DRAW_GUI

GML
if (current_state)

{

draw_rectangle(0,view_hview[0]-boxHeight,view_wview[0],view_hview[0]);

draw_text(boxPadding,view_hview[0]-boxHeight+boxPadding,messages[current_message]);

}

PRESS_SPACE(albo co innego)

GML
current_message=messages[current_message][1];

if (current_message==0)

current_state=0;

 

I teraz jak chcesz żeby pojawił się textbox z kwestia to

GML
txtctrl=instance_find(ctrl_textbox);

if (txtctrl.current_state==0)

{

txtctrl.current_state=1;

txtctrl.current_message=2;//no tutaj jaką kwestią ma zacząć, reszta to poleci sama

}

Odnośnik do komentarza
Udostępnij na innych stronach

No ja bym robił tak jakoś

Powiedzmy obiekt:ctrl_textbox;bez sprite;zaznaczony permanent (czy jakoś tak);dodajesz go do pierwszego roomu

I kod;

CREATE

GML
boxHeight=200;//do zmiany

boxPadding=10;//do zmiany

current_message=0;

curent_state=0;

messages[0][0]="";

messages[0][1]=0;

messages[1][0]="jakas kwestia";//tresc

messages[1][1]=2;//numer nastepnej kwestii

messages[2][0]="odpowiedz";

messages[2][1]=0;//i żeby skończyć

//tutaj sobie wpisz wszystkie kwestie z gry w takim formacie</span>

DRAW_GUI

GML
if (current_state)

{

draw_rectangle(0,view_hview[0]-boxHeight,view_wview[0],view_hview[0]);

draw_text(boxPadding,view_hview[0]-boxHeight+boxPadding,messages[current_message]);

}

PRESS_SPACE(albo co innego)

GML
current_message=messages[current_message][1];

if (current_message==0)

current_state=0;

 

I teraz jak chcesz żeby pojawił się textbox z kwestia to

GML
txtctrl=instance_find(ctrl_textbox);

if (txtctrl.current_state==0)

{

txtctrl.current_state=1;

txtctrl.current_message=2;//no tutaj jaką kwestią ma zacząć, reszta to poleci sama

}

 

 

 

Dziękuje Kt1117;-)

Odnośnik do komentarza
Udostępnij na innych stronach

wywala mi takie info z błędem

 

In Object obj_box, in Event CreateEvent action number 1 at line 6 : Assignment operator expected In Object obj_box, in Event CreateEvent action number 1 at line 6 : symbol } expected In Object obj_box, in Event CreateEvent action number 1 at line 6 : malformed assignment statement Compile Failed - Please check the Compile window for any additional information

 

 

 

 

 

 

coś w Create jest błąd

Odnośnik do komentarza
Udostępnij na innych stronach

Zamiast takiego formatu

GMLmessages[0][1]=0;

Rób tak

GMLmessages[0,1]=0;

I trochę zmień wyświetlanie dialogów, mam nadzieję, że wiesz o co chodzi. Zamiast takich [][], ma być [,].

 

Dzięki zaraz to zmienię;)

 

to jest ok,ale jeszcze wywala błąd coś jest nie tak w kodzie tym:

 

GML
current_message=messages[current_message][1];

if (current_message==0)

current_state=0;

 

 

tu treść błędu

 

 

Error : gml_Object_ctrl_textbox_KeyPressed_SPACE_1(2) : unexpected symbol in expression

 

Error : gml_Object_ctrl_textbox_KeyPressed_SPACE_1(2) : malformed assignment

 

Error : gml_Object_ctrl_textbox_KeyPressed_SPACE_1(2) : symbol } expected

Odnośnik do komentarza
Udostępnij na innych stronach

To ten sam błąd, jeszcze w draw GUI musisz po current_message dać GML,0

 

 

No właśnie to nic nie daje,bo chyba błąd odwołuje się nie do draw gui,a do tego

 

GML
current_message=messages[current_message][1];

if (current_message==0)

current_state=0;

Odnośnik do komentarza
Udostępnij na innych stronach

Nic nie szkodzi i tak dziękuje kt1117 za pomoc;)

W Create już zmieniłem ,tylko jeszcze tutaj w draw gui i w space

 

czyli tak ma być?

 

w draw gui

 

GML
if (current_state)

{

draw_rectangle(0,view_hview[0]-boxHeight,view_wview[0],view_hview[0]);

draw_text(boxPadding,view_hview[0]-boxHeight+boxPadding,messages[current_message][,0]);

}

 

PRESS_SPACE

GML
current_message=messages[current_message][1,0];

if (current_message==0)

current_state=0;

Odnośnik do komentarza
Udostępnij na innych stronach

DRAW_GUI

GML
if (current_state)

{

draw_rectangle(0,view_hview[0]-boxHeight,view_wview[0],view_hview[0]);

draw_text(boxPadding,view_hview[0]-boxHeight+boxPadding,messages[current_message,0]);

}

PRESS_SPACE

GML
current_message=messages[current_message,1];

if (current_message==0)

current_state=0;

Odnośnik do komentarza
Udostępnij na innych stronach

Poprawiłem,ale jednak wyskakuje błąd pokój też pusty mam utworzony do intra

 

 

GML
___________________________________________

################################################################################

############

FATAL ERROR in

action number 1

of Draw Event

for object ctrl_textbox:

 

Push :: Execution Error - Variable Get 100066.current_state(100304, -2147483648)

at gml_Object_ctrl_textbox_DrawGUI_1 (line 1) - if (current_state)

################################################################################

############

Odnośnik do komentarza
Udostępnij na innych stronach

Słaby design. Zacznijmy od systemu tekstu samego w sobie.

Zamiast się bawić we wskaźniki i tablice i maksymalną ilość wiadomości skorzystajmy z czegoś znacznie wygodniejszego. jest to o tyle wygodne ze mozesz wszedzie to wpieprzyc bez zmian do NICZEGO poza samym dodanym tekstem:

 

ds_queue to struktura w której dane są ułożone w takiej kolejności w jakiej je włożysz(first in, first out). W momencie pobrania danych z queue, dane są usunięte z kolejki, więc nie ma problemu ze wskaźnikami.

 

GML
Messages = ds_queue_create(); //Tworzymy kolejke

Dialog = false; //Zmienna do okreslenia czy jestesmy w trakcie dialogu. Mozesz jej uzyc zeby nie moc sie ruszac gdy Dialog = true.</span></span>

 

Kiedy ma dojść do jakiegoś dialogu, wypełniasz nim kolejke:

GML
//Na interakcji z jakims tam NPC czy w cutscence czy cos dodajemy dialogi:

ds_queue_enqueue(Messages,"Witaj, nieznajomy! Nazywam się Oswald z Sosnowca. Zarządzam dostawami ryżu i papierosów do stolicy.");

ds_queue_enqueue(Messages,"Jeżeli potrzebujesz taniej ryżówki daj mi znać, zawsze mamy trochę ekstra na zbyciu.");

ds_queue_enqueue(Messages,"A, prawie bym zapomniał. Skoro już tu jesteś - mógłbyś dla mnie poszukać Ryszarda? Ten leń znowu gdzieś zwiał!");

//Zmieniamy Dialog na TRUE, bo jestesmy w trakcie dialogu

Dialog = true;

 

Rysowanie boxu dla ulatwienia skopiuje od kt1117(chociaz inaczej bym to zrobil), bo mimo wszystko juz ten kod masz. Jest lekko zmieniony aby dzialal z tym przykladem:

GML
if Dialog

{

draw_rectangle(0,view_hview[0]-boxHeight,view_wview[0],view_hview[0]);

draw_text(boxPadding,view_hview[0]-boxHeight+boxPadding,ds_queue_head(Messages));

}

Działa to tak, że wyświetla tekst który jest obecnie "na czele" kolejki(funkcja ds_queue_head(id)). Nie usuwa to go z kolejki.

 

Teraz wywalenie tekstu:

Dajesz to w evencie przycisku ktorym chcesz kontynuowac tekst

GML
if !Dialog exit; //Jezeli nie jestesmy w trakcie dialogu nie potrzebujemy tego przycisku wiec wychodzimy z eventu.

ds_queue_dequeue(Messages); //To USUWA wpis ktory jest na górze. To glowny powod dla ktorego ten system jest tak wygodny, nie wiemy ile wiadomosci zostalo ale te ktora chcemy pominac samo usuwa.

if ds_queue_size(Messages) = 0 //Jeżeli kolejka jest pusta czyli skończyły nam się dialogi...

Dialog = false; //Wyłączamy okienko dialogu.</span></span>
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...