相对于其他dynamic体移动一个dynamic体

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

一开始我要英雄站在平台上而不改变它相对于平台的地位。 我通过joinSKPhysicsJointFixedjoin平台和英雄。

那么在游戏的某个时刻,我希望英雄跑在平台上,这意味着Y应该和平台保持一致,而X应该会增长。 我find的唯一解决scheme是使英雄身体静态,并改变它在didSimulatePhysics的位置。 那种方法的问题是那个位置没有准确地改变。 与平台位置相比,英雄位置落后于一个框架。

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

那么有没有其他的方法可以让英雄沿着平台移动,英雄身体应该始终保持dynamic。

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

在我的游戏循环中,我有以下几点:

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

在这里,我所做的就是不断地观察我的英雄是否在移动的桥梁上,如果是的话,我把英雄的“额外动作”属性设置为我所在的桥梁的速度。 如果我不在桥上,那么我不会加上任何额外的速度。 请注意,我没有说明heroOnBridge是如何计算的,因为它实际上取决于您是如何定义您是否在平台上。 在我的情况下,我假设你在一个平台上,如果你相交的平台框架,并在地面上。

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

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

如果你需要更多的帮助计算速度部分让我知道,我会张贴更多的我的代码。 您也可以在这里阅读我的答案,以便顺利地dynamic设置速度。

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