gpt4 book ai didi

c++ - 如何防止移动运动平台和 Box2D 中的动态主体之间的抖动?

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

我有一个移动平台(运动体),它从初始位置上升。

b2BodyDef platformDef;
platformDef.type = b2_kinematicBody;
platformDef.linearVelocity = b2Vec2(0.f, 0.5f);

现在我有一个玩家控制的球(动态 body ),它可以在上述平台上骑行,从它的位置上升。这是球的数据:

b2BodyDef ballDef;
ballDef.type = b2_dynamicBody;
ballDef.fixedRotation = true;
b2Body *ball = b2dWorld.CreateBody(&ballDef);
b2FixtureDef fixDef;
fixDef.shape = &shapeCircle; // a simple b2CircleShape with radius 0.6m
fixDef.density = 1.f;
fixDef.friction = 0.2f;
fixDef.restitution = 0.3f;
ball->CreateFixture(&fixDef);

现在球正确地在移动平台上移动,而在整个移动过程中球体会轻微抖动,即它不断地与它移动的平台发生碰撞。我试过将球的恢复设置为 0,但无济于事。

如果需要此细节,系统的像素与米的比率为 0.02。

最佳答案

我认为最好的解决方案是两个主体之间的两个焊缝之一。

如果 body 在平台上“静止”(不左右移动),则当球在平台上时在球和平台之间创建一个焊接接头。

如果球可以左右移动,则在两者之间创建一个棱柱关节,关节的方向平行于平台。

我曾使用类似的技术让蜘蛛在小行星周围行走 (here)。

摆脱这一点的真正想法是物理引擎中有一些工具,您可以使用这些工具真正增强在模拟中并不总是起作用的幕后体验。使用情境的逻辑来改变动态。

在这种情况下,在平台上或平台外意味着您必须连接或断开一些其他机制以提供更好的体验。

引擎可以处理它。在上面的示例中,用于围绕物体行走的关节在小行星边界外壳的每个顶点处都发生了变化。

关于c++ - 如何防止移动运动平台和 Box2D 中的动态主体之间的抖动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10440153/

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