gpt4 book ai didi

c++ - 为什么我的线速度返回为 0,即使我的重力似乎已设置

转载 作者:太空宇宙 更新时间:2023-11-04 14:04:50 25 4
gpt4 key购买 nike

我正在使用 Box2D 并将一些代码从旧版本移植到新版本。一个旧版本一切都很好,但是,在新版本上重力似乎不会影响 LinearVelocity。我做错了吗?

好的,这是代码...

让我的世界 (gx=0 gy=-10)...

b2Vec2 gravity;
gravity.Set(gx, gy);
LOGD("Gravity set to %f, %f", gx, gy);
world = new b2World(gravity);

创建正文...

b2BodyDef bd;
bd.type = b2_dynamicBody;
bd.position.Set(x, y);
b2Body* b = world->CreateBody(&bd);
b2PolygonShape pd;
b2Vec2 center;
center.Set(x, y);
pd.SetAsBox(width, height, center, angle);
b2FixtureDef fixtureDef;
fixtureDef.shape = &pd;
fixtureDef.density = density;
fixtureDef.friction = 0.3f;
b->CreateFixture(&fixtureDef);

但是当我跑完我的台阶时...

LOGD("Gravity is %f", world->GetGravity().y);
world->Step(dt, iterations, iterations);
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
b2Vec2 position = b->GetPosition();
float32 angle = b->GetAngle();
float32 yVelocity = b->GetLinearVelocity().y;
LOGD("Stepping %4.2f %4.2f %4.2f %f \n", position.x, position.y, angle, yVelocity);
}

旧的控制台输出是(都包括接地盒)...

D/Native  ( 4243): Stepping 0.00 -1.02 0.00 -0.500000 
D/Native ( 4243): Stepping 0.00 0.00 0.00 0.000000
D/Native ( 4243): Stepping 0.00 -1.06 0.00 -1.000000
D/Native ( 4243): Stepping 0.00 0.00 0.00 0.000000
D/Native ( 4243): Stepping 0.00 -1.13 0.00 -1.500000
D/Native ( 4243): Stepping 0.00 0.00 0.00 0.000000

这里的一切看起来都很好,但在我的地方,事情变得很奇怪......

D/Native  ( 4310): Stepping 0.00 -0.86 0.02 -0.000000 
D/Native ( 4310): Stepping 0.00 -10.00 0.00 0.000000
D/Native ( 4310): Stepping 0.00 -0.73 0.04 0.000000
D/Native ( 4310): Stepping 0.00 -10.00 0.00 0.000000
D/Native ( 4310): Stepping 0.00 -0.60 0.05 0.000000
D/Native ( 4310): Stepping 0.00 -10.00 0.00 0.000000

因此,正如您所看到的,除了具有角度(原始角度没有)之外,y 方向上没有线速度。我在这里缺少什么改变吗?

顺便说一句,这是他们创造世界的旧方法,而且他们的代码不使用固定装置,只是使用形状...

b2AABB aabb;
aabb.lowerBound.Set(x1, y1);
aabb.upperBound.Set(x2, y2);

b2Vec2 gravity;
gravity.Set(gx, gy);

world = new b2World(aabb, gravity, canSleep);

最佳答案

边界框看起来好像变成了obsolete所以我不确定是否有办法在 Box2D 中使用负位置。所以对我来说,我必须移动所有对象以假设地面为 1,并相应地更新我对 OpenGL 的翻译。我仍然不能 100% 确定这就是全部答案,所以我不会接受它,我希望有人能给出更好的答案。

关于c++ - 为什么我的线速度返回为 0,即使我的重力似乎已设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17493923/

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