Skocz do zawartości

Bounce bez obiektu


MaxGaming

Rekomendowane odpowiedzi

No tak tylko jak wyliczyć ten kierunek ruchu? Problem z wyzwalaczem jest niewielki, można chociażby sprawdzić po prostu x i y względem wielkości roomu i jego krańców, ale chodzi o to jak wyliczyć. Normalnie robię to funkcją move_bounce_all/move_bounce_solid, ale one odbijają naszą instancję od innej instancji, a co jeśli chcemy odbić go od niewidzialnej przeszkody? Na pewno jest na to wzór i na pewno ktoś już robił taki skrypt, ale chyba słabo google'owałem bo nie znalazłem :/

Odnośnik do komentarza
Udostępnij na innych stronach

Żadne collision line! Przecież wystarczy sprawdzać pozycję!

GML (step)
if(x<0 || x>room_width || y<0 || y>room_height) {

x=xprevious//Po to aby przestac spelniac warunek

y=yprevious

 

speed*=-1

//albo

//direction+=180

}

Odnośnik do komentarza
Udostępnij na innych stronach

Threef nie zrozumialeś, to samo mu napisałem z tym sprawdzaniem pozycji...

Co do:

GML
speed*=-1

//albo

//direction+=180</span></span>

pierwsze mi cofnie obiekt, a drugie obróci o 180 stopni(to zupełnie nie to samo), żadne nie odbije ścieżki, nie zadziała tak jak move_bounce :/

 

To by zadziałało tylko przy założeniu że zawsze odbija się instancja pod kontem prostym....

Odnośnik do komentarza
Udostępnij na innych stronach

Na bocznych krawędziach odbijaj hspeed, a na górnej i dolnej vspeed.

Ale słuchajcie - odbijać ma się nie tylko pod kontem prostym... Sprawdźcie jak działa ta funkcja w GMie bo chyba nie pamiętacie i nie rozumiecie o co mi chodzi :/

 

To ma działać jak w arkanoidzie z pileczką odbijającą się od ścian, nie odbija się zawsze pod kontem prostym, rozumiecie o co mi chodzi mniej więcej?

Odnośnik do komentarza
Udostępnij na innych stronach

No to sprawdź to co Uzjel podał. Bo tak działa ta funkcja. Nie odbija ona pod kątem prostym. ;)

 

GML
if(x<0 || x>room_width) {

x=xprevious//Po to aby przestac spelniac warunek

y=yprevious

 

hspeed*=-1

}

 

if( y<0 || y>room_height) {

x=xprevious//Po to aby przestac spelniac warunek

y=yprevious

 

vspeed*=-1

}

Odnośnik do komentarza
Udostępnij na innych stronach

Rzeczywiście działa, ja zawsze omijałem vspeed i hspeed, bo myślałem, że to jest niezależne od direction i nie będę mógł później poprawnie sprawdzać direction, a tu proszę :P Problem rozwiązany, dzięki wszystkim :)

 

@edit:

@Threef powinienem zastosować to z przywracaniem do poprzedniego id?

Bo wychodząc z założenia, że speed > 0(w innym wypadku nie zderzy się ze ścianą i tak, więc zawsze tak będzie) to przecież zmiana kierunku na odwrotny i tak spowoduje cofnięcie instancji tak, aby nie spełniała w dalszym ciągu warunku. Tylko tak się zastanawiam czy dobrze myślę, czy jakiegoś wyjątku nie pominąłem dlatego pytam, czy bez tego zawsze będzie działać?

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz zamiast tego ustawić gracza wewnątrz rooma.

Jeżeli okazuje się, że na przykład przyspieszasz obiekt, który się odbija to może dojść do sytuacji, że wypadnie po za ekran i będzie się tam odbijała.

 

GML
x = clamp(0,room_width);

y = clamp(0,room_height);

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