Ju1ian Temat założony przez niniejszego użytkownika |
Kolizja okrąg-okrąg dla ruchomych obiektów » 2011-06-19 16:39:50 Witam! Tworzę od jakiegoś czasu shooterek top-down. Napisałem funkcję sprawdzającą, czy zachodzi kolizja i niedopuszczającą do wejścia obiektu w obiekt. Przy kolizji ruchomy_obiekt - statyczny_obiekt, wszystko działa ok, ale gdy oba obiekty się poruszają (w moim przypadku mob i player) to one dziwnie się przepychają, a chciałbym żeby się blokowały i nikt nie mógł żadnego przepchać. Kod funkcji: void CircleCollision(float &x, float ob_x, float &y, float ob_y, float r, float ob_r, float &x_d, float &y_d, float &d_l) { //////////////////////////////////////////////////////////////////// ///////// KOLIzJA OKRĄG - OKRĄG //////////////////////////// /////////////////////////////////////////////////////////////////// float temp_x , temp_y; if(sqrt((x - ob_x)*(x - ob_x) + (y - ob_y)*(y - ob_y))<=(r+ob_r)) { temp_x = x + x_d ; temp_y = y + y_d ; x_d = temp_x - ob_x ; y_d = temp_y - ob_y ; // wydłużanie d_l = sqrt( x_d*x_d + y_d *y_d) ; x_d /= d_l ; y_d /= d_l ; x_d *= (ob_r + r) ; y_d *= (ob_r + r); x = ob_x + x_d ; y = ob_y + y_d ; } }
Z góry dziękuję za pomoc. |
|
michalp |
» 2011-06-19 16:48:44 Wyznacz wektor przesunięcia dla każdego okręgu dodając do niego wartość skalarną promienia a potem sprawdź czy mają punkt wspólny (inaczej czy wektory się przecinają).
edit: Sorki, teraz zobaczyłem, że trochę o co innego ci chodzi ;) |
|
Ju1ian Temat założony przez niniejszego użytkownika |
» 2011-06-19 16:55:22 Jak sprawdzić czy się przecinają? (sorry jestem noga)
|
|
michalp |
» 2011-06-19 17:00:50 |
|
Ju1ian Temat założony przez niniejszego użytkownika |
» 2011-06-19 17:16:42 Hmm... Chyba źle mnie zrozumiałeś. Chodzi mi o to, aby gdy potworki się napotkają to, żeby siebie nie przepychały, a ślizgały się (jeżeli wektory nie są prostopadłe do nich) i blokowały się (jeżeli są prostopadłe do nich). Ten kod który podałem tak nie działa, i w dodatku, gdy do playera biegną 3 zombiaki naraz to, gdy one się ze sobą spotkają to dziwnie przeskakują. |
|
absflg |
» 2011-06-19 17:41:08 Żeby sprawdzić czy dwa koła na siebie nachodzą, sprawdź czy odległość między ich środkami jest mniejsza od sumy ich promieni. Jeżeli obiekty wariują to wyznaczaj im ścieżki tak, by nie kolidowały ze sobą, a nie pchały się do gracza w linii prostej. |
|
Ju1ian Temat założony przez niniejszego użytkownika |
» 2011-06-19 18:46:53 Chłopie, chyba nie przeczytałeś mojego pierwszego posta. Samo sprawdzanie jest dobre, tylko chodzi o odpowiednie przesunięcie obu obiektów, tak aby one się nie przemieszczały. EDIT: Samo założenie gry jest takie, że potwory idą do mnie w linii prostej, więc tego nie będę zmieniał. |
|
kamillo121 |
» 2011-06-19 19:18:55 tylko chodzi o odpowiednie przesunięcie obu obiektów, tak aby one się nie przemieszczały.
|
Wnioskując z tego zdania i pierwszego postu po prostu mają się blokować a nie wariować. Po prostu jeżeli wektor okręgu nachodzi na drugi okrąg to skróci ten wektor o tyle o ile nachodzi na ten drugi okrąg, wtedy się zablokuje. |
|
« 1 » 2 |