Skocz do zawartości

spawner


karolo320

Rekomendowane odpowiedzi

Siema. Chciałem zrobić spawner, tylko żeby potworki nie respiły się na viewie(nie było widać jak się respią).

Wymyśliłem taki sposób:

w create spawnera dałem:

global.s+=1

global.spawn[global.s]=id

a przy śmierci potworka:

var c;

c=global.spawn[irandom_range(1,global.s)]

while(c.x<view_xview or c.x>view_xview+640 or c.y<view_yview or c.y>view_yview+480){

c=global.spawn[irandom_range(1,global.s)]

}

instance_create(c.x,c.y,potworek)

 

Ale teraz respią się tylko na viewie, a ja się za bardzo nie łapię w while, więc musiałem coś pokręcić :P

Jak zmieniłem znaki to gra stanęła :)

Aha, i zawsze jest spawner, który nie jest na viewie.

Odnośnik do komentarza
Udostępnij na innych stronach

nie do końca ;) kod powinien wyglądać tak:

 

GML (Create Spawnera)
global.spawn[global.s] = id; // zał: global.s zostało wcześniej zadeklarowane

global.s += 1; // tablica zaczyna się od 0, tylko ludzie tacy dziwni liczą od 1 :D .</span></span></span></span>

 

GML (Smierc Potworka)
do // podobne do while, ale najpierw wykonuje, potem sprawdza. Czyli wylosuje min 1 raz;)

{

c = global.spawn[irandom_range(0, global.s-1)];

}

while(c.x>view_xview[0] and c.x<view_xview[0]+view_wview[0] and c.y>view_yview and c.y<view_yview+view_hview[0]);

instance_create(c.x, c.y, potworek);

 

Faktycznie znaki miały być odwrotnie :) . Ale miało być and. Przeczytaj sobie warunek:

Twój kod:

Losuj sprawnera;
Dopóki (pozycja x jest poza widokiem albo pozycja y jest poza widokiem) {
  Losuj spawnera;
}
Stwórz potworka na spawnerze;

Widać, że losuje tak długo aż znajdzie się w środku :) . Sama zamiana znaków spowoduje, że pętla się zapętli dla każdego x i każdego y (co miałeś okazję sprawdzić :) ). Zamiana tylko or na and spowoduje za każdym razem przerwanie pętli. Z kolei obydwie akcje to będzie coś takiego (mój kod):

Wykonuj
{
  Losuj spawnera;
}
Dopóki (pozycja x jest w widoku oraz pozycja y jest w widoku);
Stwórz potworka na spawnerze;

 

Wystarczyło więc zaprzeczyć warunek w while :)

 

PS: Jeśli chcesz zapamiętać działanie while, przetłumacz do na słówko dopóki ;) . Czyli dopóki warunek jest prawdziwy, wykonuj kod niżej ;) .

Odnośnik do komentarza
Udostępnij na innych stronach

Masz rację, jednak tę sprawę załatwia and (lub or po zaprzeczeniu) :D . Ogólnie chodzi o wylosowanie nowego spawnera, jeżeli ten jest w widoku. Czyli de facto x jest w przedziale i y jest w przedziale.

 

Jeżeli szukalibyśmy warunku żeby nie był to zaprzeczamy wszystko (and na or i < na >) i albo robimy ! przed nawiasem albo wpisujemy until (chyba tak to działa, czyli tłumacząc: "do momentu, aż...")

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