2015-09-22 57 views
0

我不能等待SKAction組,因爲完成處理程序立即執行。下面是簡單的例子:如何等待所有羣組操作?

let a1 = SKAction.runAction(SKAction.fadeAlphaTo(0.5, duration: duration), onChildWithName: child1.name!) 
let a2 = SKAction.runAction(SKAction.fadeAlphaTo(1, duration: duration), onChildWithName: child2.name!) 

runAction(SKAction.group([a1, a2]), completion: {() -> Void in 
    // do something 
}) 

節點child1child2是現場的孩子。當我在iPhone 5s(iOS 8.4)模擬器上運行應用程序時,我發現完成模塊不會等待組操作完成並立即啓動。

所以我的兩個問題:

  1. 是IT方面的錯誤?如果否,在SKAction文檔中我可以找到這種行爲的解釋。

  2. 如何做到這一點?我知道我可以使用計數器,並開始每個動作a1a2與完成塊,只是檢查計數器變爲0時,但它看起來像一個樣板代碼爲我。

+0

你有一個警告說'SKScene:動畫SKScene的位置沒有任何效果.'? – WangYudong

+0

@王玉東不,沒有任何警告,所有動畫都能正常工作,而且完全像我需要的一樣。 –

+0

很奇怪,一小時前我可以重現你的問題,但現在一切正常。看到我的示例項目[這裏](https://www.dropbox.com/s/hqsnyh0czha0ymh/GroupAction.zip?dl=0)。 – WangYudong

回答

0

根據Apple的文檔,SKAction.runAction返回瞬時持續時間(即0持續時間)的動作。

因此,在您的代碼SKActions,a1a2,有瞬時持續時間。這就是爲什麼立即調用完成塊。

從蘋果文檔

SKAction.runAction:這個動作有一個瞬間的持續時間, 雖然對孩子要執行的操作可能有其自己的 的持續時間。

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKAction_Ref/#//apple_ref/occ/clm/SKAction/runAction:onChildWithName

一種方式設置完成處理程序將其設置爲子節點之一,因爲這兩個動作的時間相同。

let a1 = SKAction.fadeAlphaTo(0.5, duration: 1); 
let a2 = SKAction.fadeAlphaTo(1, duration: 1); 

child1.runAction(a1) 
child2.runAction(a2) {() -> Void in 
    //completion code 
}