2017-11-19 25 views
2

スウィフトゲームを作成する。 0-3秒の間の任意の時間間隔で永遠に機能「fireFrisbee」を起動しようとしています。ランダムな間隔で無期限に関数を呼び出す

iphoneシミュレーションでは、白い画面が表示されます。関数は一度だけアクティブに思われるコードがあなたには、いくつかの問題どこに実行することができ働いていた場合

let action = SKAction.sequence([SKAction.run(fireFrisbee), SKAction.wait(forDuration: TimeInterval(arc4random_uniform(3)))]) 

run(SKAction.repeatForever(action)) 

私は、カップルの事に注意するoverride func didMove(to view: SKView) {

答えて

3

下のコード行を持っている(一つだけフリスビー発射音が聞こえます)フリスビーは3秒後に発砲するように設定され、次にアクションを実行し、次は0秒で発動し(アクションを倍増させる)、潜在的に次のアクションは0秒で発動する(アクションを3倍にする)。

しかし、コードはとにかく動作しません。起こっているのは、ランダム値TimeInterval(arc4random_uniform(3))を取得しているということですが、そのランダム値でそのアクションを本質的にコーディングしています。アクションが繰り返されると、そのハードコードされたランダムな値が常にその中にあります。最初に実行したときにランダム2が生成されると、常に2秒ごとに実行されます。

firefrisbeeを呼び出すために、update funcの中にランダムジェネレータを置くことができるいくつかの方法があります。または、完了したら完了する呼び出しを実行して再帰的アクションを作成することができます。

let wait = SKAction.wait(forDuration: 5) 
run(wait) { 
    self.setupFireFrisbee() 
} 

func setupFireFrisbee() { 
    action = SKAction.sequence([SKAction.run(fireFrisbee), SKAction.wait(forDuration: TimeInterval(arc4random_uniform(3)))]) 
    //completion shortcut {} after action 
    run(action) { 
     self.setupFireFrisbee() 
    } 
} 
+0

素晴らしいです! Time Intervalに+ 1を追加したので、すぐに0秒に発射されません。私はもう1つ質問がありますが、アプリ起動時にすぐに起動できないようにするにはどうすればよいですか?たとえば、アプリが最初に開かれたときに5秒間待機します。ありがとうございました。 –

+0

あなたのdidMoveに5秒間待機スキルを入れて、完了したら完了のsetupFireFrisbee funcを呼び出してください... –

+0

私の編集を参照してください、ちょうどFYI、期間が一定の範囲内であることを待ちます。違いの間隔の代わりにさまざまな違いが必要な場合に必要です。 – Knight0fDragon

関連する問題