gpt4 book ai didi

c++ - 在触摸时拖动 Box2d 实体

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

我有两个 box2d 体,一个是静态的,另一个是动态的。现在我已经通过 b2revoluteJoint 将静态体与动态体连接起来。所以我的问题是:

1) 如何在 touchMoved 上移动动态主体以及附加在动态主体相同位置的静态主体。

2) 我如何移动两个以上的物体。假设我有一个人体,腿和手用 b2RevoluteJoint 连接。现在我怎样才能将所有的 body 移动到一起来创造一个自然的外观。

我是 box2d 的新手,所以遇到了一些困难。任何人都请帮助我解决这个问题。谢谢!

最佳答案

您可以使用 MouseJoint 来移动动态主体,但运动可能看起来不“自然”。

您可以使用“寻找”行为将单个物体移向触摸点。您需要限制 body 移动的速度,并将屏幕上的触摸点转换为 box2d 世界空间中的一个点。执行此操作后,您可以使用如下所示的功能将 body 移向触摸点。在每个物理更新周期对您的实体调用此操作。

   void MoveToTarget()
{
// Get the distance to the target.
Vec2 toTarget = GetTargetPos() - GetBody()->GetWorldCenter();
toTarget.Normalize();
Vec2 desiredVel = GetMaxSpeed()*toTarget;
Vec2 currentVel = GetBody()->GetLinearVelocity();
Vec2 thrust = desiredVel - currentVel;
GetBody()->ApplyForceToCenter(GetMaxLinearAcceleration()*thrust);
}

我已经成功地将它用于导弹和移动物体,并取得了一些成功 (see blog post here)。网站上也提供了源代码。

您可以连接多个物体并使用纯物理移动它们。但这真的很难。我在为另一个项目创建蜘蛛时遇到了类似的问题,发现最好使用 2-D 骨骼动画工具 (Spine),然后放置一个合理的形状(蜘蛛是非常大的 Blob ,所以球体可以很好地处理它) box2d 中的 body 来处理它的移动和碰撞检测。

另一方面,我使用一系列由旋转关节连接的球创建了一条蛇。对于第一个(最大)球的搜索行为, Action 看起来非常好。

这有帮助吗?

关于c++ - 在触摸时拖动 Box2d 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19924396/

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