[SFML] Kolizja
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

[SFML] Kolizja

AutorWiadomość
Temat założony przez niniejszego użytkownika
[SFML] Kolizja
» 2017-11-18 23:08:30
Witam serdecznie. Mam napisane wykrywanie kolizji playera z obiektami, jednak jest ono niedokładne ponieważ gracz się obraca. Wiec moje pytanie, jak uzyskać BoudingBox który się nie obraca pomimo tego iż gracz bedzie się obracał.
C/C++
void Engine::check_collision()
{
    if( player.getStatus() == Gracz::STOP ) return;
   
    //pobranie aktualnej wartoœci boxa
    FloatRect box1( player.getBoundingBox() );
   
    //zaktualizowanie go do wartoœci gdyby gracz siê ruszy³
    box1.left +=( player.getSpeed( AD, WS ).x ) * 10; //dzielimy na 10 aby bardziej  zbli¿yæ siê do œciany
    box1.top +=( player.getSpeed( AD, WS ).y ) * 10;
    /*
    Schemat sprawdzania naszego boxa z ponumerowanymi wierzcholkami
    1 ___ 2
    |     |
    3 ___ 4
    */
   
    //1
    int x =( box1.left + 15 ) / level.tile_width;
    int y =( box1.top + 15 ) / level.tile_height;
   
    if( level.poziom[ y ][ x ].isWall && box1.intersects( sprite[ y ][ x ].getGlobalBounds() ) )
    {
        player.stoj();
    }
   
    //2
    x =( box1.left + level.tile_width + 15 ) / level.tile_width;
    y =( box1.top + 15 ) / level.tile_height;
    if( level.poziom[ y ][ x ].isWall && box1.intersects( sprite[ y ][ x ].getGlobalBounds() ) )
    {
        player.stoj();
    }
   
    //3
    x =( box1.left + 15 ) / level.tile_width;
    y =( box1.top + 15 + level.tile_height ) / level.tile_height;
    if( level.poziom[ y ][ x ].isWall && box1.intersects( sprite[ y ][ x ].getGlobalBounds() ) )
    {
        player.stoj();
    }
   
    //4
    x =( box1.left + level.tile_width ) / level.tile_width;
    y =( box1.top + level.tile_height ) / level.tile_height;
    if( level.poziom[ y ][ x ].isWall && box1.intersects( sprite[ y ][ x ].getGlobalBounds() ) )
    {
        player.stoj();
    }
}
P-166961
» 2017-11-19 02:54:46
Odpowiedź to koło, ale czy ono będzie dla Ciebie wystarczająco dokładne?
P-166968
« 1 »
 Strona 1 z 1