Skocz do zawartości

Jak stworzyć napis,który pojawia się na chwile przy starcie gry


Milord

Rekomendowane odpowiedzi

Witam wszystkich

 

Chciałbym zrobić napis,który pojawi się przez moment za nim rozpocznę grę coś jak Stage 1-4 ( na środku ekranu ) view in room mam ustawiony na 800x500

potem w scenerii drugiej napis Stage 2-4 itd

 

i za np parę sekund zniknie..

Ale jak się pojawi na planszy w scenerii ten napis,to dopóki nie zniknie to chciałbym żeby bohater nie mógł wykonać ruchu.

Rozumiem,że mam stworzyć to w pustym obiekcie..

 

Mam Game maker studio pro

 

Z góry dziękuje za jakąkolwiek pomoc...

Odnośnik do komentarza
Udostępnij na innych stronach

Użyj do tego alarmów.

W create obiektu napisu zrób

GML
alarm[0]=czas; //czas wyliczasz ze wzoru room_speed*sekundy</span></span>

w alarmie 0(evencie) robisz

GML
instance_destroy();

a w graczu sprawdzasz np, przed wykonaniem ruchu

GML
if(oNapis.alarm[0]==-1)

{

//kod poruszania

};

 

To rozwiązanie co do obiektów.

A możesz po prostu w jakimś obiekcie, np. graczu dać w draw draw_text, albo draw_sprite i rysować ten napis. Wtedy podobnie, w create obiektu dajesz jakąś zmienna np.

GML
draw_napis=true;
w alarm 0
GML
draw_napis=false;
A w draw

GML
if(draw_napis)

{

//kod rysowania

};

Lub zrobic własny alarm/timer i wtedy rysowanie robisz if!(moj_alaram-=1), a w poruszaniu

GML
if(moj_alarm==-1)

{

//kod poruszania

};

Odnośnik do komentarza
Udostępnij na innych stronach

No dobra stworzyłem sobie nowy obiekt.Nazwałem go

 

obj_napis_plansza

 

w create dałem

 

GML
alarm[0]=room_speed*2

 

w Alarm 0 mam

 

GML
instance_destroy();

 

 

a w draw mam

 

GML
draw_set_font(fn_plansza);

draw_set_color(c_blue);

draw_text("STAGE 1-4" , view_xview + view_wview / 2 , view_yview + view_hview / 2 );

 

 

Wyświetla mi cyfrę 365 zamiast napisu Stage 1-4

 

nie wiem o co chodzi dziwna sytuacja:/

Odnośnik do komentarza
Udostępnij na innych stronach

GML
draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 1-4");

Tekst na końcu, najpierw x i y :)

 

i teraz w poruszaniu robisz:

GML
if(instance_number(obj_opis_plansz)>0)

{

//kod poruszania

}

 

Bo teraz dopiero pomyślałem, że wprowadziłem Cię w błąd przez moje roztargnienie. Wysypało by Ci error jakby obiekt znikł a Ty byś próbował się odwołać do jego alarmu.

Ten kod sprawdza ilość obiektów z napisem i jeżeli jest jakiś(ich liczba jest większa niż 0) to wykonuje kod poruszania ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki MaxGaming;) miałem pisać,że udało mi się to rozwiązać;) jeszcze raz dziękuje;) działa idealnie;)

A powiedz mi na podstawie tego kody,żeby nie wklejać ten obj_napisz_plansza do każdej scenerii i nie zmieniać napisu na 2-4,3-4,4-4 czy można wpisać jakiś warunek,skrypt,który by na podstawie nazwy pokojów załóżmy 4 pokoje nazywają się plansza1,plansza2,plansza3,plansza4 wyświetlał tak jak teraz napis kolejno stage 1-4 stage 2-4 stage 3-4 i stage 4-4 ??

Bo teraz to trzeba za każdym razem taki sam obiekt tworzyć w każdym pokoju tylko zmieniać mu tekst na odpowiedni,który chcemy żeby się wyświetlił.

Odnośnik do komentarza
Udostępnij na innych stronach

Oczywiście :)

Najprościej użyć switch i np. sprawdzać room:

GML
switch(room)

{

case rLevel11:

draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 1-1");

break;

 

case rLevel12:

draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 1-2");

break;

 

case rLevel21:

draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 2-1");

break;

};

Dajesz to w draw oczywiście.

Można to jeszcze zrobić na wiele innych sposobów - jak wszystko - ale myślę, że ten będzie najłatwiejszy :)

Odnośnik do komentarza
Udostępnij na innych stronach

GMLdraw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 1-4");

Tekst na końcu, najpierw x i y :)

 

i teraz w poruszaniu robisz:GMLif(instance_number(obj_opis_plansz)>0)

{

//kod poruszania

}

 

Bo teraz dopiero pomyślałem, że wprowadziłem Cię w błąd przez moje roztargnienie. Wysypało by Ci error jakby obiekt znikł a Ty byś próbował się odwołać do jego alarmu.

Ten kod sprawdza ilość obiektów z napisem i jeżeli jest jakiś(ich liczba jest większa niż 0) to wykonuje kod poruszania ;)

 

MaxGaming

 

mała poprawka w stepie Bohatera wstawiam tak

 

GML
if(instance_number(obj_opis_plansz)=0)// zamiast > ,bo tak,to blokowało cały czas ruch bohatera,tak jakby chodził w miejscu

{

//kod poruszania

}

 

Zastanawia mnie jedna rzecz...bo fajnie już to wygląda..teraz np chcę użyć image_index i na moment,kiedy bohater stoi chciałbym zmienić sprita,by stał całkowicie w miejscu.

Odnośnik do komentarza
Udostępnij na innych stronach

MaxGaming

 

mała poprawka w stepie Bohatera wstawiam tak

 

GML
if(instance_number(obj_opis_plansz)=0)// zamiast > ,bo tak,to blokowało cały czas ruch bohatera,tak jakby chodził w miejscu

{

//kod poruszania

}

 

Zastanawia mnie jedna rzecz...bo fajnie już to wygląda..teraz np chcę użyć image_index i na moment,kiedy bohater stoi chciałbym zmienić sprita,by stał całkowicie w miejscu.

Racja, znów pomyłka... Przepraszam, zmęczony jestem bo od rana praktycznie siedzę nad swoim projektem :/

Fajnie, że nie przepisujesz w ciemno tylko próbujesz wszystko samemu ogarnąć :)

 

@e:

GML
image_speed=0;

Np daj to na początek kodu w porsuzania(przed kodem poruszania właściwie), a przy poruszaniu(nie wiem dokładnie jak to u Ciebie wygląda) daj z powrotem normalny image_speed(domyślnie =1). Albo uzależnij to od speed itp., zależy jak wygląda u Ciebie poruszanie :)

Odnośnik do komentarza
Udostępnij na innych stronach

Staram się Maxgaming;) czasem uda mi się wyłapać mały błąd..W porządku i tak dziękuje za pomoc,bo dużo mi pomogłeś..

 

w draw dałem

 

 

GML
draw_set_font(fn_plansza);

draw_set_color(c_blue);

 

switch(room)

{

case roo_world1_1://nazwa pokoju

draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 1-5");

break;

 

case roo_world1_2://nazwa pokoju

draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 2-5");

break;

 

case roo_world2_1://nazwa pokoju

draw_text(view_xview + view_wview / 2 , view_yview + view_hview / 2 , "STAGE 3-5");

break;

};

 

na pierwszej planszy ładnie się napis wyświetla,ale już na drugiej nie wyświetla się..no nie wiem..hmmm..persistent też nic nie daje czy to zaznaczone czy nie;)

 

co do bohatera..hmmm dając w stepie przed kodem chodzenia gracza image_speed=0; nie do końca rozwiązuje problem ok chwilowo gracz się zatrzymuje,ale potem dziwnie się zachowuje;) niech już tu jest jak jest;)

Odnośnik do komentarza
Udostępnij na innych stronach

na pierwszej planszy ładnie się napis wyświetla,ale już na drugiej nie wyświetla się..no nie wiem..hmmm..persistent też nic nie daje czy to zaznaczone czy nie;)

Zrobiłem symulację u mnie, czy znów nie jakiś babol, ale wszystko śmiga. Może obiekt napis znajduję się tylko w pierwszym pokoju? Pamiętaj że musisz go postawić w każdym pokoju(oczywiście w menu czy coś nie musisz, tylko tam gdzie ma się wyświetlać). Persistant nie powinno tu niczego zmienić.

 

co do bohatera..hmmm dając w stepie przed kodem chodzenia gracza image_speed=0; nie do końca rozwiązuje problem ok chwilowo gracz się zatrzymuje,ale potem dziwnie się zachowuje;) niech już tu jest jak jest;)

Daj kod poruszania, bo może np. masz na speed, albo jakąś inną metodą i ciężko w ciemno Ci powiedzieć co zrobić :)

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem symulację u mnie, czy znów nie jakiś babol, ale wszystko śmiga. Może obiekt napis znajduję się tylko w pierwszym pokoju? Pamiętaj że musisz go postawić w każdym pokoju(oczywiście w menu czy coś nie musisz, tylko tam gdzie ma się wyświetlać). Persistant nie powinno tu niczego zmienić.

 

 

Daj kod poruszania, bo może np. masz na speed, albo jakąś inną metodą i ciężko w ciemno Ci powiedzieć co zrobić :)

 

 

hehe racja nie mam w drugim pokoju tego obiektu;)

już go dodaje,raczej więcej niż pewne,że będzie działało;) dziękuje;)

 

zaraz poszukam u siebie kodu na poruszanie się..

 

Zrobiłem symulację u mnie, czy znów nie jakiś babol, ale wszystko śmiga. Może obiekt napis znajduję się tylko w pierwszym pokoju? Pamiętaj że musisz go postawić w każdym pokoju(oczywiście w menu czy coś nie musisz, tylko tam gdzie ma się wyświetlać). Persistant nie powinno tu niczego zmienić.

 

 

Daj kod poruszania, bo może np. masz na speed, albo jakąś inną metodą i ciężko w ciemno Ci powiedzieć co zrobić :)

 

 

vspd ;) taką metodą mam;)

Odnośnik do komentarza
Udostępnij na innych stronach

tak mam tylko vspd i hspd ;)

no wiem...w stepie mam to jeśli chodzi o ruch bohatera;)

GML
if(vspeed>0 ^^ hspeed>0)

{

image_speed=1;

}else{

image_speed=0;

};

Jak mówiłem dokładniej to cały kod musiałbym zobaczyć, ale wydaje mi się, że to może być rozwiązanie :)

Odnośnik do komentarza
Udostępnij na innych stronach

wiem wiem dużo tego musiałbym wysłać...

 

 

zobacz

 

tak już lepiej działa

 

 

GML
if(vspd>0 ^^ hspd>0)

{

image_speed=1;

}else{

image_speed=0;

};

 

 

tylko,że jak idę w lewo jest ok,a jak w prawo,to sprita wygląda jakby cały czas krok robił;)

 

aj nie jest to już takie istotne;)

i Tak Ci bardzo dziękuje za pomoc;)

 

Ps.Zerknąłbyś jeszcze do moich dwóch tematów? bo tam mam największy problem;)

Odnośnik do komentarza
Udostępnij na innych stronach

GML
if(vspd==0 && hspd==0)

{

image_speed=0;

}else{

image_speed=1;

};

Znów moje przeoczenie xD

Dzisiaj już chyba nie myślę :/

 

Można też tamto poprawić, ale wyjdzie dłużej:

GML
if(vspd>0 ^^ hspd>0 ^^ vspd<0 ^^ hspd<0)

{

image_speed=1;

}else{

image_speed=0;

};

Więc lepiej to pierwsze.
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ę...