2015-12-17 70 views
0

我有一個節點在屏幕上以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); 
    } 
} 

回答

2

你將不得不欺騙一點。遊戲中沒有什麼是真正的「移動」。一切都只是傳送不過每幀的許多像素。如果某物移動得非常快,則可能會超調。你能做的最好的是這樣的

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

你可以考慮的是你的節點放慢,因爲它更接近另一種其他的事情。這將使到達更準確..但這可能會或可能不是你想要的遊戲。

+0

謝謝。我懷疑這些問題的選擇是有限的,最終我認爲節點在接近目標位置時放慢了速度是值得推薦的。暴力破壞節點的位置會擾亂物理和碰撞。遲早會有另一個節點不可預知地通過節點,而不是與它發生衝突。再次感謝。 – Alex