karolo320 Opublikowano 1 Sierpnia 2011 Udostępnij Opublikowano 1 Sierpnia 2011 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 Więcej opcji udostępniania...
ediepl Opublikowano 1 Sierpnia 2011 Udostępnij Opublikowano 1 Sierpnia 2011 Nie jestem pewien czy o to chodziło: GML var xx,yy; while(xx<view_xview && xx>view_wview) { xx=random_range(0,room_width) } while(yy<view_yview && yy>view_hview) { xx=random_range(0,room_height) } instance_create(xx,yy,potworek) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rudy Opublikowano 1 Sierpnia 2011 Udostępnij Opublikowano 1 Sierpnia 2011 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 Więcej opcji udostępniania...
karolo320 Opublikowano 1 Sierpnia 2011 Autor Udostępnij Opublikowano 1 Sierpnia 2011 Dzięki, ale ale w jednej sprawie nie miałeś racji :) Miało być or, bo jeśli y jest poza widokiem, to x już może być na viewie. Spawner będzie nad(bądź pod) nami :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rudy Opublikowano 1 Sierpnia 2011 Udostępnij Opublikowano 1 Sierpnia 2011 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 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ę