Kolizja - Czemu to nie działa???
Ostatnio zmodyfikowano 2012-09-21 10:05
anonim Temat założony przez niniejszego użytkownika |
Kolizja - Czemu to nie działa??? » 2012-09-16 15:29:58 Cześć Oto kod: sf::Vector2f pocCenter, enemCenter; float x = 0, y = 0; for( unsigned int i = 0; i < vPociski.size(); i++ ) for( unsigned int j = 0; j < vEnemies.size(); j++ ) { pocCenter = sf::Vector2f( vPociski[ i ].pocSprite.GetCenter() ); enemCenter = vEnemies[ j ].MySprite.GetCenter(); x = abs( pocCenter.x - enemCenter.y ); y = abs( pocCenter.y - enemCenter.y ); if( sqrt( x * x + y * y ) <= 32 ) { vPociski.erase( vPociski.begin() + i ); } }
Wszystko chodzi tak jak bym nie dopisał kolizji, t.z.n. pociski przelatują przez obiekt, który ma je blokować. Co ciekawe, kiedy zwiększę odległość do 46(teraz wynosi ona 32) to po wystrzeleniu 2 pocisku program kończy swój żywot padem ;(. |
|
DejaVu |
» 2012-09-16 15:38:45 Lepiej zrób najpierw funkcję wykrywającą kolizję między dwoma obiektami. |
|
anonim Temat założony przez niniejszego użytkownika |
» 2012-09-16 15:43:30 Ale tutaj sprawdzam odległość między środkowym punktem pocisku, a środkowym punktem Sprita 64x64[pix], jeśli jest ona mniejsza niż np.32, to zachodzi kolizja. Wydaje mi się, że dla małego pocisku 32x8[pix] będzie to dobra metoda, i nie wiem czemu nie działa. |
|
DejaVu |
» 2012-09-16 15:45:46 Twój wzór to totalna bzdura. x = abs( pocCenter.x - enemCenter.y );
|
|
hincu |
» 2012-09-20 17:50:17 na stronie sfml masz wykrywanie kolizji pod sfml 1.6 popatrz sobie w source jak to dziala |
|
anonim Temat założony przez niniejszego użytkownika |
» 2012-09-20 19:19:05 To znaczy tu błędem jest to, że GetCenter zwraca współrzędne lokalne dla sprajta. A na te kolizje juz patrzyłem i użyje CircleTest |
|
hincu |
» 2012-09-20 19:55:31 center zwraca 'srodek' sprajta ustalony przez ciebie... wzgledem tej pozycji sprajt sie porusza |
|
anonim Temat założony przez niniejszego użytkownika |
» 2012-09-21 10:05:17 GetCenter() zwraca ustalony środek WZGLĘDEM LOKALNYCH WSPÓŁRZĘDNYCH Sprajta, dlatego zamiast GetCenter trzeba użyć GetPosition(). Zamykam. |
|
« 1 » |