2016-04-20 54 views
1

我正在研究一個小型的SpriteKit遊戲。淡入淡出SKLabelNodes的最佳方式

我在主屏幕上有一個「提示」部分,我想進入和退出,每次顯示不同的提示。

我有一種方法可以工作,我自己寫的,但它很混亂,我確信有更好的方法可以完成。我希望有人能給我一種可能讓我錯過的方式(或者很長一段時間)。

這是我目前要做的事:

func createTipsLabels(){ 
    //create SKLabelNodes 
    //add properties to Labels 

    //tip1Label... etc 
    //tip2Label... etc 
    //tip3Label... etc 

    //now animate (or pulse) in tips label, one at a time... 
    let tSeq = SKAction.sequence([ 
     SKAction.runBlock(self.fadeTip1In), 
     SKAction.waitForDuration(5), 
     SKAction.runBlock(self.fadeTip1Out), 
     SKAction.waitForDuration(2), 
     SKAction.runBlock(self.fadeTip2In), 
     SKAction.waitForDuration(5), 
     SKAction.runBlock(self.fadeTip2Out), 
     SKAction.waitForDuration(2), 
     SKAction.runBlock(self.fadeTip3In), 
     SKAction.waitForDuration(5), 
     SKAction.runBlock(self.fadeTip3Out), 
     SKAction.waitForDuration(2), 
    ]) 

    runAction(SKAction.repeatActionForever(tSeq)) //...the repeat forever 

} 

//put in separate methods to allow to be called in runBlocks above 
func fadeTip1In() { tip1Label.alpha = 0; tip1Label.runAction(SKAction.fadeInWithDuration(1)) ; print("1") } 
func fadeTip1Out(){ tip1Label.alpha = 1; tip1Label.runAction(SKAction.fadeOutWithDuration(1)); print("2") } 
func fadeTip2In() { tip2Label.alpha = 0; tip2Label.runAction(SKAction.fadeInWithDuration(1)) ; print("3") } 
func fadeTip2Out(){ tip2Label.alpha = 1; tip2Label.runAction(SKAction.fadeOutWithDuration(1)); print("4") } 
func fadeTip3In() { tip3Label.alpha = 0; tip3Label.runAction(SKAction.fadeInWithDuration(1)) ; print("5") } 
func fadeTip3Out(){ tip3Label.alpha = 1; tip3Label.runAction(SKAction.fadeOutWithDuration(1)); print("6") } 

如何優化呢?

回答

2

無需創建多個標籤也不需要執行多個操作,只需創建一個您想要執行的操作的數組,然後遍歷它。

func createTipsLabels() 
{ 
    let tips = ["1","2","3","4","5"]; 
    var tipCounter = 0 
    { 
    didSet 
    { 
     if (tipCounter >= tips.count) 
     { 
     tipCounter = 0; 
     } 
    } 
    } 
    tipLabel.alpha = 0; 
    let tSeq = SKAction.sequence([ 

     SKAction.runBlock({[unowned self] in self.tipLabel.text = tips[tipCounter]; print(tips[tipCounter]); tipCounter+=1;}), 
     SKAction.fadeInWithDuration(1), 
     SKAction.waitForDuration(5), 
     SKAction.fadeOutWithDuration(1), 

     SKAction.waitForDuration(2) 

    ]) 


    tipLabel.runAction(SKAction.repeatActionForever(tSeq)) //...the repeat forever 

} 
+0

這看起來很不錯:DI好像在runBlock出現錯誤,因爲它期望得到一個「,」其中的「;」...這就是我一直致力於調用函數的原因從runBlock ...任何想法? – Reanimation

+0

對不起,需要{},我修改了代碼 – Knight0fDragon

+0

哦!哇!那太方便了!我怎麼也不知道你可以這樣使用runBlocks。值得發佈這個問題只是爲了發現:D它提示'self.tipLabel',但現在都好。超級,非常感謝你! – Reanimation