2015-12-02 58 views
0

你能告訴我爲什麼這段代碼不起作用嗎?是不是可以在SKAction.runBlock()函數中運行一個Action?Swift SpriteKit在SKAction.runBlock()運行SKAction

let testaction = SKAction.repeatActionForever(SKAction.runBlock({self.myFunction()})) 
runAction(testaction) 

這裏是我的testaction:

func myFunction() { 
    runAction(SKAction.runBlock({ 
     let i = 0 
     print(i) 
    })) 
} 

我需要這一場比賽。我想區分myFunction中的某些情況以在不同情況下運行不同的操作。我做錯了什麼?

編輯:當我將myFunction()更改爲此時,我打印1永遠,但不是從runBlock內部0。

func myFunction() { 
    let j = 1 
    print(j) 
    runAction(SKAction.runBlock({ 
     let i = 0 
     print(i) 
    })) 
} 
+1

,如果你嘗試它到底會發生什麼? –

+0

什麼都沒有。沒有輸出和沒有錯誤,只是永遠運行。 – SwiftProgger

+1

調用'runAction'不會導致一個動作運行,它只是在下一次處理場景的動畫循環時排隊一個要運行的動作。我猜測,既然你不斷地向這個隊列添加動作(甚至沒有任何延遲),那麼這個動畫循環就不會被處理。如果你不重複這個問題,而是運行X次,你會看到一堆1,然後是一堆0。 –

回答

0

喜歡的人上面已經說過,你只需要輕微的延遲添加到它,它應該工作

let testaction1 = SKAction.runBlock(self.myFunction) 
    let testaction2 = SKAction.waitForDuration(0.1) 
    let sequence = SKAction.repeatActionForever(SKAction.sequence([testaction1, testaction2])) 

    runAction(sequence)