我遇到了一些我无法找到解决方案的问题。我有摆动平台(body1)和英雄(body2)站在上面。平台正在摆动,所以英雄在平台上左右移动。
一开始我希望英雄只是站在平台上而不改变它相对于平台的位置。我通过添加SKPhysicsJointFixed
加入平台和英雄来实现这一目标。
然后在游戏中的某个时刻,我希望英雄在平台上运行,这意味着Y
应该相对于平台保持相同,X
应该增长。我发现的唯一解决方案是让英雄身体保持静止并改变它在didSimulatePhysics
中的位置。这种方法的问题在于位置没有准确变化。与平台位置相比,英雄位置滞后于一帧。
当英雄到达平台的右端后,他应该停止移动并再次站在平台上。所以我让英雄身体静止并再次添加固定关节。并且因为英雄位置变化与相对于平台的滞后英雄位置不正确。有时它会停止平台表面下方的某些像素,有时会在表面上方停留一些像素。
还有其他方法让英雄沿着平台移动,英雄身体应该始终保持动态。
答案 0 :(得分:2)
我有一个移动浮动平台的游戏。实现正确相对速度的最简单和最动态的方法是简单地调整速度。这是我为实现这一目标所做的简化版本。
在我的游戏循环中,我有以下内容:
if heroOnBridge {
hero.extraMotion = floatingBridge.physicsBody!.velocity
} else {
hero.extraMotion = CGVector(dx:0,dy:0)
}
我在这里经常看看我的英雄是否在移动的桥上,如果是的话,那么我将我的英雄的“额外运动”属性设置为我所在的桥梁的速度。如果我不在桥上,那么我不会增加任何额外的速度。请注意,我没有显示计算heroOnBridge的方式,因为它实际上取决于您如何定义是否在平台上。在我的情况下,如果您与平台框架相交并且在地面上,我假设您在平台上。
然后在我根据他的方向(左,右,跳等)计算我的英雄速度的区域,我只需将extraMotion
加到英雄的速度上。
如果你还没有我建议你在游戏循环中有一个区域来处理角色的动作。它将允许您根据某些因素(在空中,跳跃,左/右移动,在平台上等)更改您的英雄的速度。
如果你需要更多关于计算速度部分的帮助,请告诉我,我会发布更多代码。您可能还想阅读我的答案here,以便平稳且动态地设置速度。
请记住,在大多数情况下,您永远不想直接设置任何位置,总是尝试设置必要的速度以在一段时间内达到该位置。这可以防止非常紧张和不可预测的动作。