【问题标题】:Stopping nodes to exact positions将节点停止到确切位置
【发布时间】:2015-12-17 07:31:43
【问题描述】:

我有一个节点在屏幕上以 400pps 的速度移动。我想在节点到达屏幕上的精确位置时停止它。我通过在更新周期中将节点速度设置为 0 来做到这一点。

但是,节点以不可预测的量移动通过所需的点,并在稍后的某个地方停止。 我怀疑问题出在响应时间上。简单地说,物理引擎不够快,无法准确停止节点。我的应用在 Mac 上以 30fps 的速度运行,在 iPhone 5S 上以 60fps 的速度运行。

实现准确的节点移动和停止的最佳方法是什么?我想我可以在停止节点后将节点重新定位到所需的位置,但这可能会扰乱整个物理世界。 这就是我的更新方法的相关部分的样子:

- (void)update:(NSTimeInterval)currentTime {
// Start moving
   if(verticalScrollSpeed) {
      node.physicsBody.velocity = CGVectorMake(0, verticalScrollSpeed);
   }

// Stop moving
   if(verticalScrollSpeed > 0 && obstaclesContainerNode.position.y >= 0) {
      verticalScrollSpeed = 0;
      node.physicsBody.velocity = CGVectorMake(0, 0);
   }
}

【问题讨论】:

    标签: objective-c sprite-kit sprite skphysicsbody


    【解决方案1】:

    你不得不作弊一点。游戏中没有什么是真正“移动”的。一切都只是有点传送,但每帧有很多像素。如果某些东西移动得非常快,您可能会超调。你能做的最好的就是这样

    if distanceToTarget <= 1 {
        yourNode.position = targetNode.position
    }
    

    您可以考虑的另一件事是在节点靠近另一个节点时减慢它的速度。这将使到达更准确..但这可能是您的游戏想要的,也可能不是。

    【讨论】:

    • 谢谢。我怀疑此类问题的选项有限,最终我认为在节点接近目标位置时减慢节点速度是值得推荐的。蛮力强制节点的位置会弄乱物理和碰撞。迟早另一个节点将不可预测地通过该节点而不是与它发生碰撞。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多