2015-06-26 34 views
0

我對iOS上的本地編程非常新穎。我在我的遊戲場景中有一個移動SKSpriteNodes數組的函數。每次移動完成後,其節點應從場景中移除。該功能還有一個完成功能,在刪除所有SKNode後應該調用該功能。我的問題是,如果有更簡潔的方法,只需在moveAction的持續時間內添加一點額外時間,直到完成函數被調用(請參見下文)。我也玩過動作序列,但不能提出一個工作解決方案...正確檢測同步SKA的完成

每一個幫助將不勝感激!

func animateNodes(nodes: Array<SKSpriteNode>, completion:() ->()) { 
    let duration = NSTimeInterval(0.5) 
    for (_, node) in nodes.enumerate() { 
     let point = CGPointMake(node.position.x - 80, node.position.y + 80) 
     let moveAction = SKAction.moveTo(point, duration: duration) 
     let fadeOutAction = SKAction.fadeAlphaTo(0, duration: duration) 
     node.runAction(SKAction.group([moveAction, fadeOutAction]), completion: { 
      node.removeFromParent() 
     }) 
    } 
    runAction(SKAction.waitForDuration(duration + 0.1), completion:completion) 
} 

回答

1

添加一個變量count,用於跟蹤當前有多少節點活着。在每個節點的完成,減量表示,計數和檢查,看它是否是最後一個(count == 0)和運行完成的動作,如果它是:

func animateNodes(nodes: Array<SKSpriteNode>, completion:() ->()) { 
    var count = nodes.count 
    let duration = NSTimeInterval(0.5) 
    for (_, node) in nodes.enumerate() { 
     let point = CGPointMake(node.position.x - 80, node.position.y + 80) 
     let moveAction = SKAction.moveTo(point, duration: duration) 
     let fadeOutAction = SKAction.fadeAlphaTo(0, duration: duration) 
     node.runAction(SKAction.group([moveAction, fadeOutAction]), completion: { 
      node.removeFromParent() 
      count-- 
      if count == 0 { 
       completion() 
      } 
     }) 
    } 
} 

我還沒有編譯或運行它,所以有可能是錯誤的,但這應該工作

+0

這是一個好主意!我認爲有可能以某種方式立即運行所有操作,並在完成所有操作後觸發一個功能,但這種解決方案對我來說也適用,謝謝! ;) – biedert