Skocz do zawartości
  • 0
Cygnus

jak zrobić przejście do następnej planszy gdy zebrane zostaną wszystkie obiekty określonego typu.

Pytanie

Cześć wszystkim

stworzyłem sobie taki obj_przejscie i umieściłem go na końcu danej planszy,i w momencie,kiedy dojdę do końca planszy bohaterem i najadę na ten obiekt,to mnie przenosi do następnej planszy.

No,ale chciałbym to trochę urozmaicić tym,że muszę jakąś część elementów z danej planszy zebrać,żeby móc przejść do kolejnej planszy,i wtedy jeśli nie miałbym tych zebranych rzeczy,to w momencie kontaktu z obj_przejście dostanę komunikat typu "przejście zablokowane brak określonej ilości rzeczy"

 

o to kod mojego obj_przejście

 

CREATE

 

GML
nextRoom = roo_world1_2;

unlockWorld = -1;

 

Collision par_player

 

GML
///Koniec mapy wygrana

///

room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

 

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

 

 

Mam Game Maker Studio pro

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

54 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Mam pomysł na 2 sposoby:

 

1.

Zrób sobie zmienną która będzie przechowywała ilość zebranych itemków(przy destrukcji tych itemków dodawaj 1 do tej zmiennej)

GML
if(zmienna >= ileś tam){

//Akcja przechodzenia do kolejnego roomu

}else{

show_message("przejście zablokowane brak określonej ilości rzeczy");

}

2.

Przejście możliwe jeśli na mapie zostało mniej niż ileś tam itemków

GML
if(instance_number(obj_item) < ileś tam){

//Akcja przechodzenia do kolejnego roomu

}else{

show_message("przejście zablokowane brak określonej ilości rzeczy");

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Mam pomysł na 2 sposoby:

 

1.

Zrób sobie zmienną która będzie przechowywała ilość zebranych itemków(przy destrukcji tych itemków dodawaj 1 do tej zmiennej)

GMLif(zmienna >= ileś tam){

//Akcja przechodzenia do kolejnego roomu

}else{

show_message("przejście zablokowane brak określonej ilości rzeczy");

}

2.

Przejście możliwe jeśli na mapie zostało mniej niż ileś tam itemków

GMLif(instance_number(obj_item) < ileś tam){

//Akcja przechodzenia do kolejnego roomu

}else{

show_message("przejście zablokowane brak określonej ilości rzeczy");

}

 

 

Czekaj chwilka Mateuszu niech to ogarne;)

 

Czyli to tworze tą zmienną w nowym pustym obiekcie np obj_item

i tam w create daje ten kod ustalam wartość po ilu itemkach ma się odblokować plansza;)?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Czekaj chwilka Mateuszu niech to ogarne;)

 

Czyli to tworze tą zmienną w nowym pustym obiekcie np obj_item

i tam w create daje ten kod ustalam wartość po ilu itemkach ma się odblokować plansza;)?

 

tworzysz tą zmienną w obiekcie tego elementu

 

tamten kod dajesz przy kolizji z obiektem końcowym. Tam gdzie jest komentarz //Akcja..

dajesz ten twój kod

GML
room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

 

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

no dobrze,to jest jasne,ale co wpisuje w obiekcie obj_item który tworze,np sa to jakies elementy no nie wiem niech bedzie piłki,które muszę zebrać,tam też muszę coś wpisać w tym obiekcie..

 

 

bo wtym drugim co podałeś ok..to muszę wrzucić,gdzie jest akcja...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Mateusz zrobiłem tak:

 

w obj_game_controller dodałem taką zmienną w create

 

o nazwie

 

GML
global.watch = 0;

 

w draw GUI dałem

 

GML
draw_text(36, 140, string(" Watch: " + string(global.watch)));

 

 

teraz w obj_watch dałem w stepie taki kod

 

GML
if place_meeting(x,y,obj_player){

instance_destroy();

global.watch += 1;

}

 

 

no i w obiekcie przenoszenie to co mnie po konczeniu lewelu ten obiekt jak na niego najde przenosi do nastepnej planszy dałem to w kolizki z par_player

 

GML
///Koniec mapy wygrana

///

 

if(instance_number(obj_watch) < 5){

room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

}

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

else{

show_message("przejście zablokowane brak określonej ilości rzeczy");

}

 

 

Sęk w tym,że jak zbiorę mniej niż 5 watchów i najade na obj_przenoszenie no to dostaje info,"przejście zablokowane brak określonej ilości rzeczy" ale mimo to i tak mnie przenosi do następnej planszy,a nie powinno:/ co jest nie tak no i druga sprawa lepiej jakby to było info bez naciskania na ok tylko samo info ,które pojawi się na 2,3 sekundy i zniknie...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Mateusz zrobiłem tak:

 

w obj_game_controller dodałem taką zmienną w create

 

o nazwie

 

GMLglobal.watch = 0;

 

w draw GUI dałem

 

GMLdraw_text(36, 140, string(" Watch: " + string(global.watch)));

 

 

teraz w obj_watch dałem w stepie taki kod

 

GMLif place_meeting(x,y,obj_player){

instance_destroy();

global.watch += 1;

}

 

 

no i w obiekcie przenoszenie to co mnie po konczeniu lewelu ten obiekt jak na niego najde przenosi do nastepnej planszy dałem to w kolizki z par_player

 

GML///Koniec mapy wygrana

///

 

 

if(instance_number(obj_watch) < 5){

room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

}

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

else{

show_message("przejście zablokowane brak określonej ilości rzeczy");

}

 

 

Sęk w tym,że jak zbiorę mniej niż 5 watchów i najade na obj_przenoszenie no to dostaje info,"przejście zablokowane brak określonej ilości rzeczy" ale mimo to i tak mnie przenosi do następnej planszy,a nie powinno:/ co jest nie tak no i druga sprawa lepiej jakby to było info bez naciskania na ok tylko samo info ,które pojawi się na 2,3 sekundy i zniknie...

instance_number to fukcja licząca ilość danych obiektów w roomie a nie ilość zebranych itemów

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Pozwolę sobie:

 

No dobra,to co z tym zrobić żeby było dobrze? jakiej funkcji użyć?
instance_number to fukcja licząca ilość danych obiektów w roomie a nie ilość zebranych itemów

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

GML
if(instance_number(obj_watch) < 5){

 

Po to robiłeś globalną global.watch,zeby teraz z tego korzystać...

Zacznij patrzeć na to co Ci odpowiadamy.

 

GML
If (global.watch <= 5 lub inną zebrana liczba zegarków ){

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Czytam i słucham;)

 

dałem w obj_przejscie

 

ten kod:

 

GML
///Koniec mapy wygrana

if(global.watch <= 5){

room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

}

 

 

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

else{

show_message("przejście zablokowane brak określonej ilości rzeczy");

}

 

 

Nadal to samo fakt,jest tak,że jak mam mniej niż 5 zebranych watch to dostaje info przy obj_przejscie,że jest ich za mało by opuścić plansze,ale i tak mnie przenosi do następnej planszy.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Czytam i słucham;)

 

dałem w obj_przejscie

 

ten kod:

 

GML
///Koniec mapy wygrana

if(global.watch <= 5){

room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

}

 

 

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

else{

show_message("przejście zablokowane brak określonej ilości rzeczy");

}

 

 

Nadal to samo fakt,jest tak,że jak mam mniej niż 5 zebranych watch to dostaje info przy obj_przejscie,że jest ich za mało by opuścić plansze,ale i tak mnie przenosi do następnej planszy.

A bez ifa puszcza. cię do następnego poziomu?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
bez ifa wywala na czerwono błąd od razu... więc if chyba musi być.

 

Nie musi być, zobacz jaki błąd i go rozwiaz, daj na chwilę resztę to komentarza.

Przejście do następnego poziomu nie musi być od niczego zależne, powinieneś p tym wiedzieć, przy collision nie może być błędu przejścia do następnego poziomu.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Jasiek no przecież musi być zależne przejście do następnej planszy,o to chodzi,żeby zostało spełnione jakiś warunek po którym nastąpi to zdarzenie i ten obj_przejscie się odblokuje.

 

Przecież tego błędu nie ma,ale jak usunę "if" to wtedy jest błąd w kompilacji...o dokładnie to jak usunę tą część..

 

 

to jest kod w obj_przejscie

 

kolizaj z bohaterem

 

GML
///Koniec mapy wygrana

if (global.watch <= 5){ // wyalam tego if i nie kompiluje się...

room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

}

 

 

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

else{

show_message("przejście zablokowane brak określonej ilości rzeczy");

}

 

 

a tu Create z tego obj_przejscie

 

GML
nextRoom = roo_world1_2;

unlockWorld = -1;

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Bo nie możesz usunąć jednego nawiasu, zawsze jak usuwasz otwierający to zamykający też musisz.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Myślałem że pomyślał o tym żeby wywalić klamre. To chyba idzie z automatu. Mówiłem że Tylko kopiujesz zamiast myśleć. Po za tym w error wszystko jest czytelnie napisane.(no prawie)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

kurcze...Chłopaki przecież wiem,że nawiasy usuwa się wszystkie aż taki ograniczony nie jestem.. klamrowe zostawiłem;)

 

No to cię Jasiek zaskoczęnic nie jest w error opisane,bo tłumaczę,że się wtedy nie kompiluje jak if wywalę...kto tu nie słucha mnie uważnie;)

 

 

nie kompiluje się czyli tłumacząc po polsku jasno i zrozumiale po młodzieżowemu dostaje czerwony komunikat error "Compile Failed-Please check the Compile window for any additional information"

w samym na dole kompilatorze nie ma błędu... okienko compile i okienko source control

 

to jest komunikat jak wywalę ten if z nawiasami oczywiście,czy zostawię bez też to samo nic się nie zmienia;) jak nie kompiluje,to logiczne jest,że się gra nie uruchamia i nie ma innego komunikatu z błędem...

 

jak puszczę z if jak było to jest to co wcześniej opisałem w poście...zbiorę czy to więcej czy to mniej watch to przy mniejszej ilości czyli jak zbiorę 4 watch pojawia się komunikat,że za mało ich jest,ale i tak obj_przejście przepuszcza mnie do kolejnej planszy..

Myślę,że tu nie lezy problem z if...bo to nic nie daje...tylko powoduje,że się nie compiluje.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Zrób po prostu:

if (global.watch = 2){

room_goto(nextRoom);

}

 

I musi działać, a nie miałeś jakiegoś czerwonego kwadratu przy któreś linijce... Jak nie to to nie wiem.

 

 

(edit)

Jak mnie pamięć nie szwankuje to nazwa rooma musi być jako cudzysłów ponieważ to nazea

nextRoom = "roo_world1_2"

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Jasiek zaczuna coś tam działać teraz...no dobrze...ale i tak otrzymuje komunikat,czy chce czy nie chce jak spełniam warunek i mam 5 watchy to dostaje komunikat,ze jest ich za mało,ale przepuszcza mnie,jak mam mniej niż 5 watchy dostaje też komunikat,ale mnie już dalej nie przepuszcza,czyli prawidłowo,ale jeszcze kwestia tej wiadomości,bo teraz jest na zasadzie,że muszę kliknąć na wyskakujące się okienko z dialogiem i nacisnąć Ok,co jest uciążliwe,jak to ustawić,żeby był sam napis,który pokaże się np na 2,3 sekundy,że nie mam wystarczającej ilości watchy,żeby przejść do następnej planszy,no i też żeby się ten napis nie pojawił jak spełnie dany warunek,czyli jak będe miał 5 watchy lub więcej;)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Jasiek działa ,tylko pozostaje kwestia że zamiat okienka z ok,żeby na 2,3 sekundy pojawił się napis jak najadę na obj_przejscie,że za mało watchy coś w tym stylu...coś w draw trzeba zrobić...bo te okienko co jest jest kłopotliwe,trzeba non stop na ok naciskac,ale i tak blokuje ono bohatera

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Jasiek działa ,tylko pozostaje kwestia że zamiat okienka z ok,żeby na 2,3 sekundy pojawił się napis jak najadę na obj_przejscie,że za mało watchy coś w tym stylu...coś w draw trzeba zrobić...bo te okienko co jest jest kłopotliwe,trzeba non stop na ok naciskac,ale i tak blokuje ono bohatera

Draw_text + draw_rectangle + alarm

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Jasiek czyli to tak w obj_przejście stworzyć DRAW a w nim

 

GML
draw_text( x, y, brak odpowiedniej ilosci watchow do opuszczenia planszy)

 

draw_set_colour(c_white);

draw_rectangle(100, 100, 300, 200, true);

 

 

 

 

GML
alarm0=true;

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Po pierwsze nie w tej kolejności Draw o ile się nie mylę.

Po 2 zrób to w GUI. Najlepiej skorzystaj z view_wview/2 jako y i view_wview/2. Oczywiście przy x1, jeszcze - 1/2 szerokości, a w x2 + 1/2 szerokości, analogicznie do y ale 1/2 rzadzanej wysokości (oczywiście szerokość i wysokość tego prostokąta.

 

Co do textu zrób tylko xview i yview tylko nad Draw daj ustawienia halign i align jako center i middle w zależności od funkcji.

 

Jak chcesz czas daj wszystko to ifa np. Ze zmianą show i daj

GML
If show>0

 

Później jako osobne

GML
If show=0{

alarm[0]=90

Show=1}

 

W alarmie

GML
show=-1

 

Chyba bardziej niż pokazać nie mogłem. Proszę o podziękowania bo pisałem to wszystko na telefonie.

 

 

(edit)

Jeszcze w create show =-1

 

A w miejscu gdzie był show message

GML
If distanxe to objext (nazwa obiektu gracza)<156{

Show=0}else{show=-1}

 

Powiadomienie będzie się pokazywało jak będziesz przy obiekcie , a jak odejdziesz przez 3 sekundy

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Dziękuje Jasiu no to jestem pod wrażeniem jak z telefonu to pisałeś zdolny chłopak z Ciebie;)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Dziękuje Jasiu no to jestem pod wrażeniem jak z telefonu to pisałeś zdolny chłopak z Ciebie;)

Nie ma za co :-)

A chociaż kod działa jak należy?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Jasiek dałem tak:

 

w obj_przejscie dalem tak w kolizji z graczem

 

GML
///Koniec mapy wygrana

if (global.watch = 5){

room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

}

If distance_to_object (obj_player)<156{

Show=0}else{show=-1}

 

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

 

 

w Create dałem

 

GML
show=-1;

 

w Alarm0 dałem

 

GML
If show=0{

alarm[0]=90

Show=1}

 

 

w Draw GUI dałem

 

GML
If show=0{

alarm[0]=90

Show=1}

{

draw_text(view_xview[0]+100,view_yview[0]+400,"nie ma zegarkow")

}

 

 

No i coś nie działa...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Jasiek dałem tak:

 

w obj_przejscie dalem tak w kolizji z graczem

 

GML
///Koniec mapy wygrana

if (global.watch = 5){

room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

}

If distance_to_object (obj_player)<156{

Show=0}else{show=-1}

 

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

 

 

w Create dałem

 

GML
show=-1;

 

w Alarm0 dałem

 

GML
If show=0{

alarm[0]=90

Show=1}

 

 

w Draw GUI dałem

 

GML
If show=0{

alarm[0]=90

Show=1}

{

draw_text(view_xview[0]+100,view_yview[0]+400,"nie ma zegarkow")

}

 

 

No i coś nie działa...

W alarmie już nie miało być wywołania alarmu. Tylko show=-1. Przed Draw text test daj If show>=0

 

Zapomniałem że to colisia, usuń distance ,tylko show =0

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

Jasiu i tak wywala błędy mase;)

 

teraz mam tak

 

w obj_przejscie

 

DRAW GUI

 

GML
If show=0{

alarm[0]=90

Show=1}

{

if show>=0

draw_text(view_xview[0]+100,view_yview[0]+400,"nie ma zegarkow")

}

 

 

 

w Create

 

GML
show=-1;

 

 

a Alarm0

 

GML
show=-1

 

 

i w kolizji z graczem

 

GML
///Koniec mapy wygrana

if (global.watch = 5){

room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

}

{

show =0

}

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

 

 

no i nie działa;)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Jasiu i tak wywala błędy mase;)

 

teraz mam tak

 

w obj_przejscie

 

DRAW GUI

 

GML
If show=0{

alarm[0]=90

Show=1}

{

if show>=0

draw_text(view_xview[0]+100,view_yview[0]+400,"nie ma zegarkow")

}

 

 

 

w Create

 

GML
show=-1;

 

 

a Alarm0

 

GML
show=-1

 

 

i w kolizji z graczem

 

GML
///Koniec mapy wygrana

if (global.watch = 5){

room_goto_transition(nextRoom,TRANS_RANDOM,10+irandom(30), choose(c_lime,c_yellow,c_white,c_black,c_gray));

}

{

show =0

}

if unlockWorld != -1 {

ds_list_add(openWorlds,unlockWorld);

}

 

 

no i nie działa;)

If na if zamień. W 1 miejscu klamr brakuje przy ifie , według mnie powinno działać.

 

(edit)

Show zrób wszędzie z małej litery, ( skopiowales a telefon mi po. Pisze z dużej litery.)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

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

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×