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

[Box2d + SFML] Pozycje wierzchołków niestandardowych figur (trójkąty)

Ostatnio zmodyfikowano 2014-12-24 16:06
Autor Wiadomość
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.
C/C++
triangle::triangle(...)
{
    //b2Vec2 points[3];
    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 );
   
    //sf::VertexArray sftra;
    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 );
}
P-123285
1aam2am1
» 2014-12-23 21:05:44
Użyj sf::ConvexShape tam masz setOrgin
P-123287
czosnek17
Temat założony przez niniejszego użytkownika
» 2014-12-24 16:06:38
Dzięki, powinno to wyglądac tak:
C/C++
void triangle::update()
{
    static b2MassData msda;
    box->GetMassData( & msda );
    sftra.setOrigin( msda.center.x, msda.center.y ); //ConvexShape
    sftra.setPosition( box->GetPosition().x / RSC, box->GetPosition().y / RSC );
    sftra.setRotation( sfrot( box ) );
}
P-123303
« 1 »
  Strona 1 z 1