2017-09-05 100 views
1

嘗試使用SKLabelNode在標籤上逐個顯示下面數組中的元素。我認爲問題在於它比數組更快地遍歷數組,因此導致崩潰,因爲self.addChild()嘗試再次顯示「Set」,而「Ready」仍在顯示。爲每一個元素迭代時添加一個延遲

我的問題是,我如何減慢這個迭代,以便在「Set」顯示之前「Ready」可以出現和消失?

let readySetGo = ["Ready", "Set", "GO!"] 
for i in readySetGo { 
    newLevelLabel.text = i 
    newLevelLabel.fontSize = 60 

    let wait = SKAction.wait(forDuration: 2) 
    let remove = SKAction.removeFromParent() 
    let sequence = SKAction.sequence([wait, remove]) 

    newLevelLabel.run(sequence) 

    self.addChild(newLevelLabel) 
} 
+0

是newLevelLabel a UELabel?也添加newLevelLabel三次到父視圖似乎沒有意義 – axelspark

+0

這是一個倒數的遊戲?在你的程序中的這個代碼 - 在sceneDidLoad,update()等? –

+0

此代碼是在...重寫func didMove(查看:SKView),它是一個SKLabelNode ... – stinkyProgram

回答

2

它之所以被立即會去是因爲你不鏈條一切行動以相同的順序,那麼你所有的階段都在同一時間運行:

試試這個,我現在不是編譯器:

let readySetGo = ["Ready", "Set", "GO!"] 

newLevelLabel.fontSize = 60 

let seq: [SKAction]=[] 
let waitTime:TimeIneterval = 2 

for i in readySetGo { 

    let block = SKAction.run{ 
     self.newLevelLabel.text = i 
    } 

    let wait = SKAction.wait(forDuration: waitTime) 

    seq.append(wait) 
    seq.append(block) 

} 

let wait = SKAction.wait(forDuration: waitTime) 
let remove = SKAction.removeFromParent() 
seq.append(wait) 
seq.append(remove) 
let sequence = SKAction.sequence(seq) 

newLevelLabel.run(sequence) 

self.addChild(newLevelLabel) 
+0

你正在增加你的等待時間,所以準備好了,然後設置它是2秒,並且在set和go之間是3秒。我想你想拿出'waitTime + = 1' – Knight0fDragon

+0

@ Knight0fDragon是的,這是一個解決問題的例子,我希望臭臭的程序知道如何管理他的等待時間 –

+0

謝謝這麼多傢伙,我只編程過爲期3個月,所以這對我來說是新的,謝謝。 – stinkyProgram