我有一个节点在屏幕上移动,速度为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);
}
}
答案 0 :(得分:2)
你必须作弊。游戏中没有任何东西真正“移动”。一切都只是传送,但每帧很多像素。如果某些东西移动得非常快,你可能会超调。你能做的最好就是这样
if distanceToTarget <= 1 {
yourNode.position = targetNode.position
}
您可以考虑的另一件事是减慢您的节点,因为它越接近另一个节点。这会使到达更加准确..但这可能是您想要的游戏,也可能不是。