我花了一些時間尋找到的排隊,甚至閱讀本http://www.raywenderlich.com/79149/grand-central-dispatch-tutorial-swift-part-1這是有幫助的各種方法,但我覺得我越讀入GCD,更多的困惑和不確定我成爲自己的關於正確的方法。有人能給我一個建議嗎?在我的雨燕遊戲如何排隊事件
我的目標是這樣的:我在做一個遊戲,玩家可以失去健康,由於一些遊戲事件。玩家在頂部有一個健康欄(心臟),每當他們被擊中時,我都會讓心臟在0.1秒的時間間隔內向上飛行。我探索某種隊列的原因是,在某些情況下,玩家可能會非常迅速地失去健康,以至於事件的發生速度比動畫快。因此,它有時會「跳過」心臟,因爲它無法跟上健康損失。這只是在一些傷害較高的地方。即使沒有動畫,它仍然偶爾發生,雖然我覺得有點少。
所以我想我能做的是排隊等待每一次健康損失事件,這樣就會強制事件順序進行,但是我沒有成功(它仍然超速並跳過了心臟,第10顆心,第8顆心和第5顆,然後它說遊戲結束了,我想慢下來,把心取出,以便看到它們消失)。
這是我嘗試代碼:
dispatch_async(dispatch_get_main_queue(), {
heartToRemove!.runAction(
SKAction.sequence([SKAction.moveByX(0, y:50, duration:0.1),
SKAction.runBlock
{
heartToRemove!.removeFromParent()
self.hearts.removeLast()
}]))
})
這樣的想法是運行在隊列3個動作: 首先,移動心臟了。接下來,從父視覺刪除(因此它消失關閉遊戲不僅僅是的正上方),最後從SKNodes(心)的數組中刪除它,以便下一次心臟被移除,它進入在未來的一如果這是合理的,那麼線不是一回事。
我也試過dispatch_sync但只是凍結了我的比賽,我認爲是錯誤的。還有其他建議嗎?
謝謝你這麼多的時間!