gpt4 book ai didi

c++ - Box2D:旋转电机关节不工作

转载 作者:行者123 更新时间:2023-11-30 02:49:00 25 4
gpt4 key购买 nike

无论我尝试什么,我都无法让电机关节在 Box2d 中旋转(具体来说,我使用的是 liquidfun,它是 Box2d 的超集)你能看出以下代码不产生的任何原因吗..
1.圆形静态“枢轴”
2.由旋转关节电机旋转的动态“木板”

我得到了两个物体,但“木板”没有旋转。

        b2BodyDef bd2;
bd2.type = b2_staticBody;
bd2.position.Set(0, 0);
b2Body* pivot = world->CreateBody(&bd2);
{
b2CircleShape circleShape;
circleShape.m_radius = 0.5f;
b2FixtureDef myFixtureDef;
myFixtureDef.shape = &circleShape;
pivot->CreateFixture(&myFixtureDef);
}

b2BodyDef bd3;
bd3.type = b2_dynamicBody;
bd3.position.Set(0, 0);
bd3.angle = 1.0f;
b2Body* plank = world->CreateBody(&bd3);
{
b2PolygonShape boxShape;
boxShape.SetAsBox(2, 0.5f);
b2FixtureDef myFixtureDef2;
myFixtureDef2.shape = &boxShape;
plank->CreateFixture(&myFixtureDef2);
}

{
b2RevoluteJointDef revoluteJointDef;
revoluteJointDef.bodyA = pivot;
revoluteJointDef.bodyB = plank;
revoluteJointDef.collideConnected = false;
revoluteJointDef.localAnchorA.Set(0, 0);
revoluteJointDef.localAnchorB.Set(0, 0);
revoluteJointDef.enableMotor = true;
revoluteJointDef.maxMotorTorque = 100000.0f;
revoluteJointDef.motorSpeed = 2.0f;
b2RevoluteJoint* m_joint = (b2RevoluteJoint*)world->CreateJoint(&revoluteJointDef);
}

最佳答案

好的,问题是我没有为物体定义密度。我只是假设如果你不自己输入密度总是默认为 1.0。这是更正后的代码。

b2BodyDef bd2;
bd2.type = b2_staticBody;
bd2.position.Set(0, 0);
b2Body* pivot = world->CreateBody(&bd2);
{
b2CircleShape circleShape;
circleShape.m_radius = 0.5f;
b2FixtureDef myFixtureDef;
myFixtureDef.density = 1.0f;
myFixtureDef.shape = &circleShape;
pivot->CreateFixture(&myFixtureDef);
}

b2BodyDef bd3;
bd3.type = b2_dynamicBody;
bd3.position.Set(0, 0);
bd3.angle = 1.0f;
b2Body* plank = world->CreateBody(&bd3);
{
b2PolygonShape boxShape;
boxShape.SetAsBox(10.0f, 0.5f);
b2FixtureDef myFixtureDef2;
myFixtureDef2.shape = &boxShape;
myFixtureDef2.density = 1.0f;
plank->CreateFixture(&myFixtureDef2);
}

{
b2RevoluteJointDef revoluteJointDef;
revoluteJointDef.bodyA = pivot;
revoluteJointDef.bodyB = plank;
revoluteJointDef.collideConnected = false;
revoluteJointDef.localAnchorA.Set(0, 0);
revoluteJointDef.localAnchorB.Set(0, 0);
revoluteJointDef.enableMotor = true;
revoluteJointDef.maxMotorTorque = 100000.0f;
revoluteJointDef.motorSpeed = 2.0f
b2RevoluteJoint* m_joint = (b2RevoluteJoint*)world->CreateJoint(&revoluteJointDef);
}

关于c++ - Box2D:旋转电机关节不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21629346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com