Cygnus Opublikowano 27 Lipca 2015 Udostępnij Opublikowano 27 Lipca 2015 Jak zrobić coś w podobnym stylu jak w TOP HAT textbox wyświetlające się dialogi do intra gry? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 27 Lipca 2015 Udostępnij Opublikowano 27 Lipca 2015 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 Więcej opcji udostępniania...
Cygnus Opublikowano 28 Lipca 2015 Autor Udostępnij Opublikowano 28 Lipca 2015 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 Więcej opcji udostępniania...
Cygnus Opublikowano 28 Lipca 2015 Autor Udostępnij Opublikowano 28 Lipca 2015 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 Więcej opcji udostępniania...
Sutikku Opublikowano 28 Lipca 2015 Udostępnij Opublikowano 28 Lipca 2015 Zamiast takiego formatu GML messages[0][1]=0; Rób tak GML messages[0,1]=0; I trochę zmień wyświetlanie dialogów, mam nadzieję, że wiesz o co chodzi. Zamiast takich [][], ma być [,]. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 28 Lipca 2015 Autor Udostępnij Opublikowano 28 Lipca 2015 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 Więcej opcji udostępniania...
kt1117 Opublikowano 28 Lipca 2015 Udostępnij Opublikowano 28 Lipca 2015 To ten sam błąd, jeszcze w draw GUI musisz po current_message dać GML ,0 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 28 Lipca 2015 Autor Udostępnij Opublikowano 28 Lipca 2015 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 Więcej opcji udostępniania...
kt1117 Opublikowano 28 Lipca 2015 Udostępnij Opublikowano 28 Lipca 2015 No tak bo tutaj też musisz dać , zamiast ][. Ja się pomyliłem bo w większości języków jest tak jak ja zrobiłem, ale tu jest inna składnia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 28 Lipca 2015 Autor Udostępnij Opublikowano 28 Lipca 2015 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 Więcej opcji udostępniania...
kt1117 Opublikowano 28 Lipca 2015 Udostępnij Opublikowano 28 Lipca 2015 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 Więcej opcji udostępniania...
Cygnus Opublikowano 28 Lipca 2015 Autor Udostępnij Opublikowano 28 Lipca 2015 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 Więcej opcji udostępniania...
kt1117 Opublikowano 28 Lipca 2015 Udostępnij Opublikowano 28 Lipca 2015 W create miałem literówkę, zamień GML curent_state na GML current_state Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 28 Lipca 2015 Udostępnij Opublikowano 28 Lipca 2015 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 Więcej opcji udostępniania...
Cygnus Opublikowano 28 Lipca 2015 Autor Udostępnij Opublikowano 28 Lipca 2015 świetnie Lordzie Vader,ale gdzie to po kolei w kodzie ulokować? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę