[SFML + Box2d]Obracanie sprite'a
Ostatnio zmodyfikowano 2014-05-09 18:53
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ą. 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 ); 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 { } } }
|
|
DejaVu |
» 2014-05-09 18:03:18 |
|
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). |
|
1 « 2 » |