Kolizje kwadrat-prostokąt
Ostatnio zmodyfikowano 2015-01-10 21:03
Malina94 Temat założony przez niniejszego użytkownika |
Kolizje kwadrat-prostokąt » 2015-01-09 22:19:01 Witam! Opisałam w poniższy sposób kolizję prostokąta z kwadratem (piłka narysowana na kwadratowej bitmapie). Czy te kolizje są dobrze opisane? Ogólnie to działa, piłka się odbija, ale czasami gdy zahaczy o rogi innych prostokątów, to raczej przelatuje i nic z nimi nie robi. Próbowałam opisać kolizję na rogach prostokąta, ale wyszło mi to marnie i w trakcie testów nie widać różnicy. Czy ktoś mógłby mi podpowiedzieć, jak wziąć się za te rogi? :P if( pilkaY + Yspeed <= prostokatY + wysokosc && pilkaY + promien + Yspeed >= prostokatY && pilkaX + promien + Xspeed >= prostokatX && pilkaX + Xspeed <= prostokat + szerokosc ) { if( pilkaY + promien + Yspeed >= prostokatY && pilkaY + Yspeed < prostokatY ) { } else if( pilkaY + Yspeed > prostokatY + wysokosc / 2 && pilkaY + promien + Yspeed >= prostokatY + wysokosc ) { } else if( pilkaX + Xspeed < prostokatX && pilkaX + promien + Xspeed >= prostokatX ) { } else if( pilkaX + Xspeed + promien > prostokatX + dlugosc && pilkaX + Xspeed <= prostokatX + dlugosc ) { } }
Przykład mojej implementacji jednego z narożników prostokąta: if( pilkaX + promien + Xspeed >= prostokatX && pilkaY + promien + Yspeed >= prostokatY ) { } |
|
NopeDotAvi |
» 2015-01-09 22:38:22 sf::RectangleShape x, y; if( x.getGlobalBounds().intersects( y.getGlobalBounds() ) { }
po co wynajdywać koło na nowo? @@ahh nigdzie nie pisze ze to sfml, potem dam edita |
|
pekfos |
» 2015-01-09 22:42:46 @@ahh nigdzie nie pisze ze to sfml, potem dam edita |
Strzelam, że wszystko tylko nie SFML. Hmmm, SDL..? |
|
Malina94 Temat założony przez niniejszego użytkownika |
» 2015-01-09 23:16:13 No w SDLu piszę :) |
|
Piastlis |
» 2015-01-09 23:37:28 Rozumiem że to ma działać tak: 1 Sprawdź czy kulka zachodzi na kwadrat w następnej sekwencji 2 sprawdź czy jest to górna krawędź jak tak to zareaguj 3 jak nie to sprawdź czy jest to dolna krawędź itd. Ale dlaczego w dolnej krawędzi dzielisz wysokość na 2? |
|
Malina94 Temat założony przez niniejszego użytkownika |
» 2015-01-10 00:05:27 Hmm... ostatnio trochę kombinowałam w kodzie i wtedy wydawało mi się, że tak będzie ok. Ale z tego co widzę, to ta połowa wysokości jest tam zbędna.
Tak, to działa w ten sposób. W klamerkach mam zawarte zmiany kierunku ruchu dla piłki. |
|
Piastlis |
» 2015-01-10 00:14:00 Test jest tak skonstruowany że jak prędkość jest większa od promienia to przeleci... Przekombinowałeś. Wystarczy przekopiować pojedyńcze warunki z 1 instrukcji.
|
|
Malina94 Temat założony przez niniejszego użytkownika |
» 2015-01-10 16:39:09 I jeden warunek na ścianę? To wystarczy? U mnie ta piłka lata całkiem dobrze, ale na tych rogach jest właśnie problem :P W sumie z tego co jeszcze patrzałam, to na nich wyłapuje tylko ogólną kolizję. |
|
« 1 » 2 |