将一个动态体相对于其他动态体移动

时间:2015-01-19 17:23:22

标签: ios objective-c sprite-kit

我遇到了一些我无法找到解决方案的问题。我有摆动平台(body1)和英雄(body2)站在上面。平台正在摆动,所以英雄在平台上左右移动。

一开始我希望英雄只是站在平台上而不改变它相对于平台的位置。我通过添加SKPhysicsJointFixed加入平台和英雄来实现这一目标。

然后在游戏中的某个时刻,我希望英雄在平台上运行,这意味着Y应该相对于平台保持相同,X应该增长。我发现的唯一解决方案是让英雄身体保持静止并改变它在didSimulatePhysics中的位置。这种方法的问题在于位置没有准确变化。与平台位置相比,英雄位置滞后于一帧。

当英雄到达平台的右端后,他应该停止移动并再次站在平台上。所以我让英雄身体静止并再次添加固定关节。并且因为英雄位置变化与相对于平台的滞后英雄位置不正确。有时它会停止平台表面下方的某些像素,有时会在表面上方停留一些像素。

还有其他方法让英雄沿着平台移动,英雄身体应该始终保持动态。

1 个答案:

答案 0 :(得分:2)

我有一个移动浮动平台的游戏。实现正确相对速度的最简单和最动态的方法是简单地调整速度。这是我为实现这一目标所做的简化版本。

在我的游戏循环中,我有以下内容:

if heroOnBridge {
    hero.extraMotion = floatingBridge.physicsBody!.velocity
} else {
    hero.extraMotion = CGVector(dx:0,dy:0)
}

我在这里经常看看我的英雄是否在移动的桥上,如果是的话,那么我将我的英雄的“额外运动”属性设置为我所在的桥梁的速度。如果我不在桥上,那么我不会增加任何额外的速度。请注意,我没有显示计算heroOnBridge的方式,因为它实际上取决于您如何定义是否在平台上。在我的情况下,如果您与平台框架相交并且在地面上,我假设您在平台上。

然后在我根据他的方向(左,右,跳等)计算我的英雄速度的区域,我只需将extraMotion加到英雄的速度上。

如果你还没有我建议你在游戏循环中有一个区域来处理角色的动作。它将允许您根据某些因素(在空中,跳跃,左/右移动,在平台上等)更改您的英雄的速度。

如果你需要更多关于计算速度部分的帮助,请告诉我,我会发布更多代码。您可能还想阅读我的答案here,以便平稳且动态地设置速度。

请记住,在大多数情况下,您永远不想直接设置任何位置,总是尝试设置必要的速度以在一段时间内达到该位置。这可以防止非常紧张和不可预测的动作。