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

[SFML + Box2d]Obracanie sprite'a

Ostatnio zmodyfikowano 2014-05-09 18:53
Autor Wiadomość
kubawal
Temat założony przez niniejszego użytkownika
» 2014-05-09 16:27:41
Odświeżam temat. Po odgrzebaniu tego projektu postanowiłem go dokończyć. Po chwili zastanowienia wymyśliłem, że nie trzeba teksturować konkretnego kształtu, tylko "wpiąć" sprite'a a środek kształtu, żeby jego środek obracał się i przemieszczał razem z nim. Wszystko fajnie działa, tylko sprite'y odmawiają współpracy - nie chcą się obracać.
Normalne sprite'y (np takie w animacjach, o ustalonej pozycji) się obracają.
C/C++
void Body::displayBody( RenderWindow & win, b2Body * b, Texture ** fillTexture )
{
    bool autoInterpolate = true;
    int i = 0;
    for( b2Fixture * f = b->GetFixtureList(); f; f = f->GetNext(), i++ )
    {
        b2Shape * sh = f->GetShape();
        b2AABB aabb;
        b2AABB nraabb;
        sh->ComputeAABB( & nraabb, b2Transform( b->GetPosition(), b2Rot( DGtoRD( 0 ) ) ), 0 ); // nie obrócone AABB
        sh->ComputeAABB( & aabb, b->GetTransform(), 0 );
       
        if( fillTexture[ i ] )
        {
            if( autoInterpolate )
                 fillTexture[ i ]->setSmooth( true );
           
            Sprite sp( * fillTexture[ i ] );
            sp.setOrigin( B2toSF( nraabb.GetExtents() ) );
            sp.setPosition( B2toSF( aabb.GetCenter() ) );
            sp.rotate( RDtoDG( b->GetAngle() ) );
            win.draw( sp );
        }
        else
        {
            // rysowanie nieteksturowanej figury
            //...
        }
    }
}
P-109570
DejaVu
» 2014-05-09 18:03:18
P-109575
kubawal
Temat założony przez niniejszego użytkownika
» 2014-05-09 18:53:14
Już znalazłem błąd: był w funkcji przeliczającej radiany na stopnie: liczyła (rad) * (pi / 180) zamiast (rad) * (180 / pi).
P-109579
1 « 2 »
Poprzednia strona Strona 2 z 2