2017-09-05 6 views
1

SKLabelNodeを使用して、以下の配列の要素を1つずつラベルに表示しようとしています。私は問題がそれがシーケンスをそのコースを実行するのにかかるよりも速く配列を反復することで、 "Ready"がまだ表示されている間にself.addChild()が "Set"のために再び表示しようとしているのでクラッシュを引き起こすと信じています。配列全体を反復するときに、単一の要素ごとに遅延を追加します。

「セット」が表示される前に、「準備完了」が表示されて消えるように、この繰り返しを遅くするにはどうすればよいですか?これを試してみてください

私は、:あなたはとても同じ順序ですべてのあなたの行動、あなたのすべてのステージが同時に実行されていないチェーンを行うため

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

is newLevelLabel a UILabel?親ビューに3回newLevelLabelを追加しても意味がないようです – axelspark

+0

これはゲームのカウントダウンですか?あなたのプログラムのどこにこのコードがありますか?sceneDidLoad、update()など? –

+0

このコードは... override 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秒です。 3秒。私はあなたが 'waitTime + = 1'を取り出したいと思っています – Knight0fDragon

+0

@ Knight0fDragonはい、これは問題を解決するための例です、私はstinkyProgramが彼の待ち時間を管理する方法を知っていることを願って –

+0

ありがとう、 3ヶ月間、これは私には新しく、ありがとう.. – stinkyProgram

関連する問題