2014-12-30 58 views
2

我試圖讓整個屏幕SKSpriteNode反彈,但是當我運行它,我得到一個錯誤(在第一行):swift spritekit - 不能用'SKAction!'類型的參數調用'runAction'

不能援引「runAction」類型SKAction的」的說法! 「

我不知道是什麼原因造成這一點。我粘貼下面的整個runAction代碼:

self.runAction(SKAction.sequence(
     [ SKAction.repeatAction(SKAction.sequence(
      [ 
       {self.updatePath()}, 
       SKAction.followPath(path.CGPath, duration: 3.0) 
      ]), count: numberOfBounces), 
      {actionMoveDone()} 
     ] 
    )) 

在此先感謝!

回答

3

你的代碼是一個有點混亂。你並不真正的

首先需要的是第一序列。使用完成塊更有意義。

其次,爲什麼你內心的序列中的花括號? self.updatePath()是一個SKAction嗎?一個序列只能是一個SKA陣列。如果這是一個SKAction,你不需要任何花括號,否則你需要使用SKAction.runBlock({})

所以根據你的代碼..我想這就是你想要做的。

self.runAction(
    SKAction.repeatAction(
     SKAction.sequence([ 
      // guessing self.updatePath isnt an SKAction, but I don't know 
      SKAction.runBlock({ self.updatePath() }), 

      SKAction.followPath(path.CGPath, duration: 3.0) 

     ]), count: numberOfBounces), 
    completion:{ 
     // also not sure if this is an SKAction, or something else 
     actionMoveDone() 
}) 
5

更改一個動作的參數在動作啓動後不會產生任何影響。因此,在執行一系列操作時,您的操作將重複使用相同的原始路徑。此外,在運行上self的動作,我以爲是SKScene子類,當followPath行動通常是在精靈運行。

如果你想有一個精靈每次迭代過程中遵循不同的路徑,你需要創建一個新的動作。一種方法是創建一個函數來更新路徑,創建一個新的動作,然後在完成當前動作時調用它自己。例如,

func createAction() { 
    updatePath() 
    sprite.runAction(SKAction.followPath(path.CGPath, asOffset: false, orientToPath: true, duration: 3.0), 
     completion: { 
      if (++self.count < numberOfBounces) { 
       self.createAction() 
      } 
      else { 
       // Run this after running the action numberOfBounces times 
       self.actionMoveDone() 
      } 
     } 
    ) 
} 

,並通過調用函數啓動一系列

createAction() 
相關問題