MiChAl200 Opublikowano 19 Lutego 2011 Udostępnij Opublikowano 19 Lutego 2011 Jak mam zrobić, żeby np. bohater podchodzi do innego ludzika i może z nim porozmawiać. Pojawia się na dole okienko z tekstem co mówią. Ale, żeby wtedy nie możemy kierować naszym ludzikiem. Sterowanie ma się zatrzymać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
candy Opublikowano 19 Lutego 2011 Udostępnij Opublikowano 19 Lutego 2011 Dodaj do bohatera zmienną stop: GML //===gdy włącza się rozmowa o_bohater.stop=1; //===gdy kończymy o_bohater.stop=0; //===sterowanie bohatera if(!stop) { //cała reszta kodu na sterowanie } Albo możesz dać taki warunek: GML //===sterowanie bohatera if(!instance_number(o_okienko_z_rozmową)) { //cała reszta kodu na sterowanie } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MiChAl200 Opublikowano 19 Lutego 2011 Autor Udostępnij Opublikowano 19 Lutego 2011 Ale bardziej mi zależy na kodzie tego dialogu, bo nie mam pojęcia jak zrobić. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
candy Opublikowano 19 Lutego 2011 Udostępnij Opublikowano 19 Lutego 2011 Musisz najpierw wywołać rozmowę. Podchodzisz do kolesia i klikasz "klawisz X". Wtedy tworzy Ci się nowy obiekt (o_rozmowa): GML //=== event Key Press "klawisz X" w kolesiu, z którym chcemy porozmawiać /* Musimy sprawdzić, czy koleś stoi blisko bohatera. Głupio będzie jeżeli będziemy gadać z kolesiem, który stoi na drugim końcu planszy. Zróbmy to przez collision_point. Oczywiście możesz to zrobić korzystając z innych funkcji.*/ if(collision_point(x,y,o_bohater,1,0)) { o_bohater.stop=true; instance_create(xx,yy,o_rozmowa) o_rozmowa.text=xyz; } Teraz zajmijmy się tekstem (kod dotyczy obiektu o_rozmowa): GML //===create=== text=false;// zmienna ta mówi, który tekst ma być wyświetlony //===draw=== if(text==0) draw_text(xx,yy,"AAAA") else if(text==1) draw_text(xx,yy,"BBBB") else if(text==2) draw_text(xx,yy,"CCCC") else . . . //=== Key Press jakiś klawisz=== text+=1;//zmienia wyświetlany tekst if(text==jakaś wartość)//kończymy rozmowę { o_bohater.stop=false; instance_destroy() } Z grubsza to wygląda mniej więcej tak. Musisz zrobić jakieś ładne okienko i nałożyć tekst nad okienko. Jeżeli rozmów w grze ma być dużo, to dobrym rozwiązaniem będzie przerzucenie wszystkich rozmów do plików txt. Każdemu kolesiowi odpowiada jeden txt. Wtedy musiałbyś byś napisać kod, który będzie otwierał odpowiedni txt i wczytywał odpowiednie linijki tekstu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MiChAl200 Opublikowano 19 Lutego 2011 Autor Udostępnij Opublikowano 19 Lutego 2011 Ej, no coś mi nie idzie... Mógłbyś/Mogłabyś zrobić przykład w GMie i mi go przesłać? Bo u mnie nic się nie dzieje. Nie wiem co źle robię :P EDIT: A nie, działa gadanie, ale nie wiem czemu nie działa włączenie rozmowy gdy podchodzę obok ludzika i nacisne spacje Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
candy Opublikowano 19 Lutego 2011 Udostępnij Opublikowano 19 Lutego 2011 Mówisz i masz: https://gmclan.org/up4155_12_gadu_gadu.html Mam nadzieję, że to rozwiąże Twój problem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MiChAl200 Opublikowano 19 Lutego 2011 Autor Udostępnij Opublikowano 19 Lutego 2011 Dzięki! Działa :) Ale co zrobić, żeby rozmowa się zaczęła kiedy bohater jest obok postaci, a nie jak nachodzi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cordoba Opublikowano 19 Lutego 2011 Udostępnij Opublikowano 19 Lutego 2011 GML (Step) if distance_to_object(jakisobiekt) < 20 // tutaj ilość pikseli { // tutaj twój kod } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MiChAl200 Opublikowano 19 Lutego 2011 Autor Udostępnij Opublikowano 19 Lutego 2011 Wszystko działa! Dzięki za pomoc :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MiChAl200 Opublikowano 20 Lutego 2011 Autor Udostępnij Opublikowano 20 Lutego 2011 Przepraszam, że post pod postem, ale chciałem, żeby zauważony był post. Jednak mam problem.... Zmieniłem troszkę kod, np. to, żeby zamiast wyłączania całej gry, było to co jak w pierwszym ludziku. GML if(moze==true) { text+=1; if (kto="ludek") { if(text==4) { bohater.stop=false; kolo1.gada=false; health-=10; instance_destroy() } } if(kto="kupiec") { if(text==6) { kupiec.gada=false; bohater.stop=false; instance_destroy() } } } Dodałem, żeby było łatwiej, podzielenie, że jak podchodzisz do np. kupca to zmienna "Kto" zmienia się na kupiec i wczytuje odpowiednie dialogi. W pierwszej linijce w twoim przykładzie if(1), chociaż nie wiem czemu, ale zamieniłem na if(moze==true) i działało dobrze. Problem polega na tym, że jak gadasz z ludkiem to jest wszystko dobrze, ale jak już z kupcem, to po skończeniu gadania, ona zaczyna się od nowa! Co więcej w obu postaciach jest ten sam kod (tylko zmienione są w obu zmienne "kto") Co mam zrobić? Dodam to, że włączyłem raz grę w debug mode i zauważyłem, że podczas kończenia rozmowy z ludkiem zmienna gada zmienia się z 1 na 0, ale w kupcu "gada" jest przez cały czas na 1 i przez to pewnie się rozmowa powtarza. Co ja mam robić? Co źle zrobiłem w kodzie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
candy Opublikowano 20 Lutego 2011 Udostępnij Opublikowano 20 Lutego 2011 Co z if, to masz rację, miało być if(moze). Teraz co do rozmowy. Zamień kupiec.gada=false;/kolo1.gada=false; na kupiec.alarm[0]=1;/kolo1.alarm[0]=1;. Dodaj event, w kupcu i kolo1, alarm[0] i tam wpisz gada=false;. Problem tkwi w tym, że gdy naciskasz SPACE, aby wyłączyć rozmowę, to działa jeszcze ona na kupca (czy na inne obiekty). Zmienia się zmienna gada na false i natychmiast rozpoczynana jest rozmowa na nowo. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MiChAl200 Opublikowano 20 Lutego 2011 Autor Udostępnij Opublikowano 20 Lutego 2011 No, teraz działa jak należy :) Dzięki, ale zastanawia mnie, czemu jedna w pierwszym ludziku działało dobrze? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
candy Opublikowano 20 Lutego 2011 Udostępnij Opublikowano 20 Lutego 2011 Jedynie co mi przychodzi do głowy jest, że object_index pierwszego kolesia jest mniejsze niż object_index obiektu rozmowa. Z drugim kolesiem jest na odwrót. GM sprawdza po kolei wszystkie obiekty według ich object_index. Skoro drugi koleś miał większe object_index niż rozmowa, to najpierw była wykonywana akcja w obiekcie rozmowa (zamknięcie rozmowy), a potem akcja w drugim kolesiu (rozpoczęcie rozmowy). Ale nie jestem co do tego pewien, że tak jest. 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ę