Skocz do zawartości

Dialog


Rekomendowane odpowiedzi

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

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

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

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

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

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

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ę...