Skocz do zawartości

Move bounce all - source?


pablo1517

Rekomendowane odpowiedzi

Siemka, nie było mnie tu milion lat - ale teraz jestem z banalnym pytaniem zapewne.

Chodzi mi o to, czy jest jakiś prosty sposób by zrobić odbicia przynajmniej na takim poziomie jak move bounce all w GML?

Tzn. tak jakby kod źródłowy tej funkcji bo nie robię tego co robię w GML ^^ i zaczyna wyłazić hehe.

Chodzi o powiedzmy proste kółka na ekranie, które odbijaja się od siebie i krawędzi ekranu, żeby ten kąt odbicia był realistyczny, a nie piźnięty random xP.

Odnośnik do komentarza
Udostępnij na innych stronach

nie musisz robić random wystarczy że zmienisz znak z + na - w momencie kolizji powiedzmy masz zmienne które odpowiada za pozycje x i y oraz zmienne które odpowiadają za to o ile ruszy się obiekt na x i y nazwijmy je xw, yw. Kiedy obiekt osiągnie jakąś pozycje na ekranie (np. koniec okna czy zetknięcie się z jakimś obiektem) xw lub yw zmienia znak na przeciwny w zależności od tego jak obiekt jest położony w stosunku do końca okna lub obiektu. Mam nadzieję że nie jest to jakoś zawiło napisane i sobie poradzisz.

Odnośnik do komentarza
Udostępnij na innych stronach

nie musisz robić random wystarczy że zmienisz znak z + na - w momencie kolizji powiedzmy masz zmienne które odpowiada za pozycje x i y oraz zmienne które odpowiadają za to o ile ruszy się obiekt na x i y nazwijmy je xw, yw. Kiedy obiekt osiągnie jakąś pozycje na ekranie (np. koniec okna czy zetknięcie się z jakimś obiektem) xw lub yw zmienia znak na przeciwny w zależności od tego jak obiekt jest położony w stosunku do końca okna lub obiektu. Mam nadzieję że nie jest to jakoś zawiło napisane i sobie poradzisz.

 

W skrócie to chyba chodziło o takie coś:

vSpeed = -vSpeed; //predkosc pionowa
hSpeed = -hSpeed; //predkosc pozioma

//a tak wyliczasz pozycję, dla przykładu
x += vSpeed;
y += hSpeed;

Odnośnik do komentarza
Udostępnij na innych stronach

Ale wy mądrzy jesteście ;>? A co jeśli krążek uderzy w ścianę, która będzie pod trochę innym kątem niż pionowa lub pozioma ;>. Co jeśli jeden krążek uderzy w drugi krążek? Czy wygraliście kiedyś w bilard xD? Fizyka nie jest TAKA PROSTA.

Musiałbyś nadać wektor normalny każdej ścianie, i przy zderzeniu obliczać kąt odbicia. ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Czyli kąt padania = kąt odbicia? Dobrze to przy ścianach jeszcze da się zrobić, zastanawiam się tylko nad obiektami o nieregularnych kształtach, lub też innych okrągłych obiektach. No i z tego co pamiętam move_bounce_all raczej w miare sensownie odbijał te obiekty.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie, nie odbijał sensownie.

Co do kuli to wyznaczenie normalnej jest banalne.

yASaxXu.png

 

Jak widzisz point_direction ze środka kuli wystarczy.

 

A do nieregularnych kształtów to widziałem ten skrypt: http://www.gmlscripts.com/script/normal_detect jeszcze go nie używałem ale chyba tutaj może pomóc.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

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