2014-05-20 91 views
0

嗯,我有一輛車的車輪在矩形塊上旋轉時沒有向前移動。b2圓形不能旋轉b2多邊形形狀Box2d Cocos2dx

車輪 - > b2CircleShape
矩形塊 - > b2PolygonShape

我給兩個密度和摩擦。依然沒有 !

具體來說,我有一個車輪接頭在汽車底盤和車輪之間操作。 我希望汽車通過給予車輪馬達正向速度向前移動。

代碼:

b2PolygonShape boxSahpe; 
boxSahpe.SetAsBox(68/PTM_RATIO, 40/PTM_RATIO); 

b2BodyDef bd; 
bd.type = b2_dynamicBody; 

bd.position.Set(8.85f, 10.0f); 
bd.userData = this; 
body = world->CreateBody(&bd); 
body->CreateFixture(&boxSahpe, 1.0f); 


b2BodyDef circleBD; 
circleBD.type = b2_dynamicBody; 

b2CircleShape circle; 
circle.m_radius = 0.4f; 

b2FixtureDef fd; 
fd.shape = &circle; 
fd.density = 1.0f; 
fd.friction = 0.9f; 

// left 
circleBD.position.Set(7.70f, 9.0f); 
m_wheel1 = world->CreateBody(&circleBD); 
m_wheel1->CreateFixture(&fd); 

// right 
circleBD.position.Set(9.75f, 9.0f); 
m_wheel2 = world->CreateBody(&circleBD); 
m_wheel2->CreateFixture(&fd); 

b2WheelJointDef jd; 
b2Vec2 axis(0.0f, 1.10f); 

jd.Initialize(body, m_wheel1, m_wheel1->GetWorldCenter(), axis); 
jd.motorSpeed = 0.0f; 
jd.maxMotorTorque = 20.0f; 
jd.enableMotor = true; 
jd.frequencyHz = m_hz; 
jd.dampingRatio = m_zeta; 
m_spring1 = (b2WheelJoint*)world->CreateJoint(&jd); 

jd.Initialize(body,m_wheel2, m_wheel2->GetPosition(), axis); 
jd.motorSpeed = 0.0f; 
jd.maxMotorTorque = 10.0f; 
jd.enableMotor = false; 
jd.frequencyHz = m_hz; 
jd.dampingRatio = m_zeta; 
m_spring2 = (b2WheelJoint*)world->CreateJoint(&jd); 

m_spring 1 & 2 - > b2WheelJoint
m_wheel 1 & 2 - > b2Body
體 - > b2Body

+0

你的意思是輪體完全不旋轉,或者它只是不通過關節控制旋轉?顯示設置關節的代碼。 – iforce2d

+0

有你的父親... 是的,圓形形狀在其位置旋轉只有不會前進...它像油一樣灑在地面上,輪子不能向前移動...我給了矩形塊和輪子摩擦... – user2416728

+0

爲什麼電機轉速爲零? PTM_RATIO的價值是什麼?您是否嘗試將速度設置爲非零,最大扭矩更高?我嘗試了PTM_RATIO = 64和motorSpeed = 10的代碼,它運行良好。 – iforce2d

回答

1

真的建議您使用調試平局顯示,否則就像閉着眼睛猜測。在這種情況下,我想你會馬上看到了問題你自己 - 這裏是你的情況是什麼樣的,當我嘗試:

enter image description here

隨着frequencyHz的(2例)的車輪關節低值,它們沒有足夠的剛度來將主體從地面上拿下來。你可以使頻率更高(大約4左右似乎足以讓它移動),但我猜你可能也想讓主體變小。

+0

這實際上不是唯一的解決方案,但它的標誌是將最佳實踐提前。我做了你所說的。 它被標記爲答案,因爲它讓我意識到我正在通過給予0.9f的圓摩擦力和0.6f的盒子來實現我所做的愚蠢行爲。箱子應該比行動體更大的摩擦力以保持它的位置。 – user2416728