[Box2d + SFML] Pozycje wierzchołków niestandardowych figur (trójkąty)
Ostatnio zmodyfikowano 2014-12-24 16:06
czosnek17 Temat założony przez niniejszego użytkownika |
[Box2d + SFML] Pozycje wierzchołków niestandardowych figur (trójkąty) » 2014-12-23 20:22:07 Chcę mieć w programie trójkąty. Teraz tylko spadają, ale nie obracają się - nie wiem jak to napisać. Chodzi o funkcję update. Teraz jest tak, że do stałej pozycji ustalonej w konstruktorze dodaję pozycję symulowanego ciała box, a to nie uwzględnia obrotu. Nie da się pobrać pozycji wierzchołków zmiennej box więc trzeba wymyślić sposób na ich obliczenie(chyba że jest inny sposób). A tu już nie mam pomysłu. triangle::triangle(...) { points[ 0 ] = b2Vec2(( pos.x ) * RSC,( pos.y + height / 2 ) * RSC ); points[ 1 ] = b2Vec2(( pos.x + width / 2 ) * RSC,( pos.y + height ) * RSC ); points[ 2 ] = b2Vec2(( pos.x - width / 2 ) * RSC,( pos.y + height ) * RSC ); boxshape.Set( points, 3 ); sftra = sf::VertexArray( sf::Triangles, 3 ); sftra[ 0 ].position = sf::Vector2f( points[ 0 ].x / RSC, points[ 0 ].y / RSC ); sftra[ 1 ].position = sf::Vector2f( points[ 1 ].x / RSC, points[ 1 ].y / RSC ); sftra[ 2 ].position = sf::Vector2f( points[ 2 ].x / RSC, points[ 2 ].y / RSC ); }
void triangle::update() { sftra[ 0 ].position = sf::Vector2f( boxshape.GetVertex( 0 ).x / RSC + box->GetPosition().x / RSC, boxshape.GetVertex( 0 ).y / RSC + box->GetPosition().y / RSC ); sftra[ 1 ].position = sf::Vector2f( boxshape.GetVertex( 1 ).x / RSC + box->GetPosition().x / RSC, boxshape.GetVertex( 1 ).y / RSC + box->GetPosition().y / RSC ); sftra[ 2 ].position = sf::Vector2f( boxshape.GetVertex( 2 ).x / RSC + box->GetPosition().x / RSC, boxshape.GetVertex( 2 ).y / RSC + box->GetPosition().y / RSC ); }
|
|
1aam2am1 |
» 2014-12-23 21:05:44 Użyj sf::ConvexShape tam masz setOrgin |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2014-12-24 16:06:38 Dzięki, powinno to wyglądac tak: void triangle::update() { static b2MassData msda; box->GetMassData( & msda ); sftra.setOrigin( msda.center.x, msda.center.y ); sftra.setPosition( box->GetPosition().x / RSC, box->GetPosition().y / RSC ); sftra.setRotation( sfrot( box ) ); }
|
|
« 1 » |