Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kolizja - Czemu to nie działa???

Ostatnio zmodyfikowano 2012-09-21 10:05
Autor Wiadomość
anonim
Temat założony przez niniejszego użytkownika
Kolizja - Czemu to nie działa???
» 2012-09-16 15:29:58
Cześć
Oto kod:
C/C++
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 ;(.
P-65050
DejaVu
» 2012-09-16 15:38:45
Lepiej zrób najpierw funkcję wykrywającą kolizję między dwoma obiektami.
P-65051
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.
P-65052
DejaVu
» 2012-09-16 15:45:46
Twój wzór to totalna bzdura.
C/C++
x = abs( pocCenter.x - enemCenter.y );
P-65053
hincu
» 2012-09-20 17:50:17
na stronie sfml masz wykrywanie kolizji pod sfml 1.6 popatrz sobie w source jak to dziala
P-65301
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
P-65302
hincu
» 2012-09-20 19:55:31
center zwraca 'srodek' sprajta ustalony przez ciebie... wzgledem tej pozycji sprajt sie porusza
P-65305
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.
P-65324
« 1 »
  Strona 1 z 1