将节点停止到精确位置

时间:2015-12-17 07:31:43

标签: objective-c sprite-kit sprite skphysicsbody

我有一个节点在屏幕上移动,速度为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);
   }
}

1 个答案:

答案 0 :(得分:2)

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

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

您可以考虑的另一件事是减慢您的节点,因为它越接近另一个节点。这会使到达更加准确..但这可能是您想要的游戏,也可能不是。