Mechanizm kolizji obiektów sfml

0

Siemano, pisze grę w sfml która polega na tym, że sterujemy samolotem po osi x który jest na dole mapy a z góry lecą samoloty które musimy zastrzeliwywać. Zrobiłem mechanizm który sprawdza czy pocisk uderzył w samolot przeciwnika jednak nie zawsze on działa tzn. gdy pocisk trafi to raz on zadziała a raz nie.

pocisk ma wymiary 20x20 a punkt odniesienia to setOrigin(10, 0)
samolot przeciwnika ma wymiary 50x50 a punkt odniesienia to setOrigin(25, 50) ponieważ jest odwrócony o 180 stopni

void kolizja(Sprite& enemy, Sprite& bullet, bool & trafiony)
{
    int x_bullet = bullet.getPosition().x;;
    int y_bullet = bullet.getPosition().y;
    int x_enemy = enemy.getPosition().x;
    int y_enemy = enemy.getPosition().y;
    bullet.setOrigin(10, 0);
    if (y_bullet == y_enemy && x_bullet - 25 < x_enemy && x_bullet + 25 > x_enemy)
    {
        trafiony = true;
    }
    
}
1

Wydaje mi się że na upartego mógłbyś spiąć swoją gierkę z Box2D jeżeli chodzi o kolizje, jednak jak nie chcesz tego robić to może spróbuj użyć tej klasy: https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1Rect.php do wykrywania 'overlapu' dwóch obiektów.

0

Spróbuje, dzięki wielkie za pomoc

0

Rozwiązałem w taki sposób, może na dłuższą mete średnie rozwiązanie ale w moim projekcie w zupełności wystarcza

void kolizja(Sprite& enemy, Sprite& bullet, bool & trafiony, bool & punkt)
{
    bullet.setOrigin(10, 0);
    if (bullet.getGlobalBounds().intersects(enemy.getGlobalBounds()))
    {
        trafiony = true;
        if (trafiony == true && punkt == false)
        {
            punkty_+=1;
            punkt = true;
        }
    
    }
    
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1