2016-04-03 77 views
0

我正在構建一個遊戲,當屏幕被觸摸時(它在touchesBegan中),標籤應該彈回到屏幕(僅一次)。Sprite Kit中的彈跳標籤

我發現this擴展與「反彈」幫助,但我不知道會發生什麼,當我觸摸restartButton(此按鈕是工作得很好)以前3秒(長的時間?!?!), myLabel只會出現沒有任何動畫。我做錯了什麼?

Ps:restartButton有一個removeAllActions()。所以即使這個動畫在循環中(我猜不是),它會被停止,不是嗎?

//myLabel 
    myLabel.position = CGPoint(x: self.frame.width/2, y: self.frame.height) 
    myLabel.text = "0" 

    self.addChild(myLabel) 

    //bounces into screen (using Sprite-Kit Spring) 
    self. myLabel.runAction(SKAction.moveTo(CGPoint(x: self.frame.width/2, y: self.frame.height/1.125), duration: 3.0, delay: 0.5, usingSpringWithDamping: 0.2, initialSpringVelocity: 0.0)) 

當restartButton被觸摸時,它調用此函數:

func restartScene(){ 
     self.removeAllChildren() 
     self.removeAllActions() 
     gameStarted = false 

     createScene() 
    } 

PS:createScene()是實際遊戲場景(的東西,如位置,規模,物理學等)。

+0

removeAllActions僅刪除場景中的動作,而不是其子節點的動作。 RemoveAllChildren不會刪除操作。致電刪除標籤上的所有操作。 – Knight0fDragon

+0

謝謝!有效!! =) – Luiz

回答

1

在Sprite Kit中工作時,請注意SKScene是SKNode的成員。撥打電話removeAllActions只會刪除應用於屏幕的操作,並且調用removeAllChildren只會刪除子項,而不是操作。

您需要致電removeAllActions讓所有的孩子停下來。

如果您想讓場景的方法去除所有兒童的動作,請在SKNode上設置擴展名。

extension SKNode 
{ 
    func removeAllActionsIncludingChildren() 
    { 
     self.removeAllActions() 
     self.children.map { $0.removeAllActionsIncludingChildren()} 
    } 
} 
+0

謝謝!!! =) – Luiz