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