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 » |