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: 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 ); 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" ); 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" ); 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 |
|
MrPoxipol |
» 2014-02-04 17:48:01 |
|
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... |
|
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 |
|
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ą. |
|
DejaVu |
» 2014-02-07 13:46:33 Jak tak intensywnie maglujesz Box2D to rozważ później napisanie jakichś artykułów. |
|
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... |
|
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. |
|
« 1 » |