[英]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.