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

[SFML + Box2d] Budowa autka (problem wheel jointami)

Ostatnio zmodyfikowano 2014-02-08 14:07
Autor Wiadomość
kubawal
Temat założony przez niniejszego użytkownika
[SFML + Box2d] Budowa autka (problem wheel jointami)
» 2014-02-04 10:46:51
Witam!

Chcę sobie napisać grę typu "autko 2d jeżdżące po trudnym terenie" i mam problem z tworzeniem amortyzatorów autka.
Wyczytałem, że do takich celów powinno się stosować wheel jointy. Jednak mam z nimi problem. O ile na początku autko się raz czy dwa odbije, to później jointy jakby się urywają u koła się rozjeżdżają.

Oto kod tworzący autko:
C/C++
class Body
{
    b2Body b;
   
    //...
};
class Game
{
    b2World world;
    RenderWindow win;
    vector < Body *> objs;
    //...
    void addDynamicBody( /*...*/ );
};

void createCar( Game * g )
{
    Vector2f ltPos( 320.0f, 100.0f ); // pozycja left-top autka
   
    // karoseria
    b2PolygonShape sh;
    sh.SetAsBox( SFtoB2( 50.0f ), SFtoB2( 20.0f ), SFtoB2( ltPos + Vector2f( 50.0f, 20.0f ) ), 0.0f );
    Body * car = g->addDynamicBody( Vector2f(), sh, "car" );
   
    // koła
    float whRad = 10.0f;
    b2CircleShape wh;
    wh.m_radius = SFtoB2( whRad );
   
    wh.m_p = SFtoB2( ltPos + Vector2f( 20.0f, 60.0f ) );
    Body * lwheel = g->addDynamicBody( Vector2f(), wh, "left wheel" );
   
    wh.m_p = SFtoB2( ltPos + Vector2f( 80.0f, 60.0f ) );
    Body * rwheel = g->addDynamicBody( Vector2f(), wh, "right wheel" );
   
    // amortyzatory
    b2WheelJointDef spr;
    spr.collideConnected = true;
    spr.dampingRatio = 10.3f;
    spr.enableMotor = true;
    spr.motorSpeed = 0.0f;
    spr.maxMotorTorque = 100000.0f;
   
    spr.Initialize( car->b, lwheel->b, SFtoB2( ltPos + Vector2f( 20.0f, 60.0f ) ), b2Vec2( 0.0f, 0.1f ) );
    g->world.CreateJoint( & spr );
   
    spr.Initialize( car->b, rwheel->b, SFtoB2( ltPos + Vector2f( 80.0f, 60.0f ) ), b2Vec2( 0.0f, 0.1f ) );
    g->world.CreateJoint( & spr );
}

Dodam, że przy wyświetlaniu tego za pomocą b2Draw wyświetlają się dziwne dodatkowe linie wychodzące  od kół i idące "gdzieś w świat"
http://youtu.be/IXzPF43MW34
P-103944
MrPoxipol
» 2014-02-04 17:48:01
P-103977
kubawal
Temat założony przez niniejszego użytkownika
» 2014-02-06 14:06:09
Już patrzyłem na te obydwa tutki. A z tego co wyczytałem o wheel joincie wynika, że to jest jakby połączenie prismatic i revolute jointa (koło może się kręcić i podskakiwać na wybojach) <- czy dobrze mówię?
Bo przecież wheel joint powinien być ograniczony do pewnej osi...
P-104088
kubawal
Temat założony przez niniejszego użytkownika
» 2014-02-06 15:37:54
Dobra, koła się już nie rozjeżdżają (przy inicjalizacji jointa podawałem pozycję zaczepienia do karoserii, a powinno się podawać środek koła)

Ale jest jeszcze jeden problem: koła się za mało odbijają, kiedy autko spada to trochę się odbiją, a później karoseria leży na kołach i amortyzatory nie działają.
http://youtu.be/bb285-UoSA4
P-104104
kubawal
Temat założony przez niniejszego użytkownika
» 2014-02-07 12:16:38
Dodam jeszcze, że amortyzatory przez chwilę działają, a dopiero później jakby sie spłaszczają i już nie działają.
P-104159
DejaVu
» 2014-02-07 13:46:33
Jak tak intensywnie maglujesz Box2D to rozważ później napisanie jakichś artykułów.
P-104166
kubawal
Temat założony przez niniejszego użytkownika
» 2014-02-07 14:43:37
Też rozważałem tę kwestię i doszedłem do wniosku, że lepiej najpierw się jej dobrze nauczyć, żeby nie pisać bzdur...
P-104171
kubawal
Temat założony przez niniejszego użytkownika
» 2014-02-08 14:07:32
Napisałem o tym problemie na oficjalnym forum box2d(http://www.box2d.org/forum​/viewtopic.php?f=3&t=9643) i wyszło, że po prostu miałem za duże wartości
parametrów wheel jointa. Co do tego artykułu: zamierzam najpierw napisac jakąś grę żeby sobie poćwiczyć box'a, a później może napiszę cały kurs o stosowaniu box'a i sfml'a przy tworzeniu gier.
P-104241
« 1 »
  Strona 1 z 1