gpt4 book ai didi

c++ - 在 C++ 的 Box2D 中添加关节后, body 改变了它的位置

转载 作者:行者123 更新时间:2023-11-28 05:32:40 39 4
gpt4 key购买 nike

当我在两个物体之间创建关节时,它们的位置会发生变化。我不创造任何力量。

代码:

#include <iostream>
#include <Box2D/Box2D.h>

int main() {
// WORLD
b2World world(b2Vec2(0, 0));

// BODY DEF
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;

// SHAPES
b2PolygonShape polygonShape;
polygonShape.SetAsBox(1, 1);

b2PolygonShape polygonShape2;
polygonShape2.SetAsBox(0.5, 0.5);

// BODY 1
b2Body* body = world.CreateBody(&bodyDef);
b2Fixture* fixture = body->CreateFixture(&polygonShape, 1);

// BODY 2
b2Body* body2 = world.CreateBody(&bodyDef);
b2Fixture* fixture2 = body2->CreateFixture(&polygonShape2, 1);

// JOINT
b2RevoluteJointDef jointDef;
jointDef.bodyA = body;
jointDef.localAnchorB.SetZero();

jointDef.bodyB = body2;
jointDef.localAnchorA.Set(1, 1);
b2Joint* joint = world.CreateJoint(&jointDef);

// LOGS (X POSITION)
std::cout << "[ body 1 ] " << body->GetPosition().x << std::endl;
std::cout << "[ body 2 ] " << body2->GetPosition().x << std::endl;

world.Step(1 / 50.0f, 8, 3);

std::cout << "[ body 1 ] " << body->GetPosition().x << std::endl;
std::cout << "[ body 2 ] " << body2->GetPosition().x << std::endl;
return 0;
}

输出(x 位置):

[ body 1 ] 0                                (before step)
[ body 2 ] 0
[ body 1 ] -0.2 (after step)
[ body 2 ] 0.8

我认为它应该返回

[ body 1 ] 0                                (before step)
[ body 2 ] 0
[ body 1 ] 0 (after step)
[ body 2 ] 1

也许我的代码有问题?我是 Box2D 的新手。我应该怎么做才能获得预期的结果?

在该步骤之前,body 1body 2 的位置是(0, 0)。我认为它应该在步骤之后自动将 body 2 放置到 (1, 1),它不应该移动两个 body。

最佳答案

您的代码未设置 b2BodyDef position 字段,因此创建的两个主体的中心位于 Vec2(0, 0) 的默认位置(根据 b2Body.h 文件中的 b2BodyDef 结构定义)。根据您的代码将 localAnchorAlocalAnchorB 设置到的位置,我怀疑您创建主体的代码需要更像:

b2BodyDef bodyDef1;
bodyDef1.type = b2_dynamicBody;
bodyDef1.position.Set(0.0f, 0.0f);

b2BodyDef bodyDef2;
bodyDef2.type = b2_dynamicBody;
bodyDef2.position.Set(1.0f, 1.0f);
...
b2Body* body = world.CreateBody(&bodyDef1);
...
b2Body* body2 = world.CreateBody(&bodyDef2);

这样你的 body polygonShapeVec2(0.0f, 0.0f) 为中心,你的 body2 polygonShape2 以前一个形状的右上角为中心,连接两个物体的 anchor 就在同一个角(Vec2( 的世界位置1.0f, 1.0f)).

关于c++ - 在 C++ 的 Box2D 中添加关节后, body 改变了它的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39065359/

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