繁体   English   中英

拖动Box2d身体触摸

[英]Drag Box2d Bodies on Touch

我有两个box2d主体,一个是静态的,另一个是动态的。 现在我通过b2revoluteJoint加入了静态体与动态体。 所以我的问题是:

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

2)我如何移动两个以上的尸体。 假设我有一个人体,腿和手与b2RevoluteJoint连接在一起。 现在我如何将所有的身体移动到一起以创造自然的外观。

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

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

您可以使用“搜索”行为将单个身体移向触摸点。 您需要建立对身体移动速度的限制,并将屏幕上的触摸点转换为box2d世界空间中的一个点。 完成后,您可以使用类似下面的功能将身体移向触摸点。 在每个物理更新周期的实体上调用此操作。

   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);
   }

我已经成功地使用了这个导弹和移动的东西取得了一些成功( 见博客文章 )。 源代码也可在网站上找到。

您可以连接多个实体并使用纯物理移动它们。 但这真的很难。 我有一个类似的问题为另一个项目创建蜘蛛,并发现最好使用二维骨骼动画工具( 脊椎 )然后只是在身体上放置一个合理的形状(蜘蛛是非常大的斑点,所以一个球体很好地处理它)在box2d中处理移动它和碰撞检测。

另一方面,我使用由旋转关节连接的一系列球创造了一条蛇。 随着对第一个(最大)球的搜寻行为,这个动作看起来非常好。

这个有帮助吗?

1)在box2d中拖动对象是mouseJoint。 在touchBegan中,您可以使用要移动的对象和任何静态体(例如groundBody)创建鼠标关节,但在此关节中,这可以是每个静态体。 在touchMoved中,您可以更改mouseJoint的位置。 在touchEnded销毁联合:)

2)你可以创建更多的revoluteJoints例如腿和主体连接和臂和主体也连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM