2017-01-24 8 views
1

私は障害が発生した後、ランダムな時間を待っているシーケンスを持っていますが、ゲームを実行すると、例えば最初のランダム遅延は1.4秒ですが、最初の遅延だけではなく、まったく時間です1.4であり、変化しません(1.4でなくてもかまいません)。私はランダムな戻り値を持つ関数を作成しようとしましたが、関数は動作しません。私はこれをどのように解決できるか考えていません。ここでは、ランダム戻り値を持つ関数のコードです。それが助け場合obstSwitch()は障害物を作成する関数です:SpriteKitシーケンスで異なるランダム遅延を取得する方法は?

func getRandomDelay() ->Double { 
    let randomNumber = arc4random_uniform(20) + 5 
    let randomDelay: Double = Double(randomNumber)/10 
    print(randomDelay) 
    return randomDelay 
} 

とHERESにゲーム開始時に呼び出されるの取得機能:

func gameStarted() { 
    gameAbleToStart = false 
    moveLine() 
    scoreTimer() 
    let runObstSwitch = SKAction.run { 
     self.obstSwitch() 
    } 
    let wait = SKAction.wait(forDuration: getRandomDelay()) 
    let sequence = SKAction.sequence([runObstSwitch, wait]) 
    self.run(SKAction.repeatForever(sequence)) 
} 
+1

'letRandomNumber = arc4random_uniform(20)+ 5'は' getRandomDelay() '関数の中に*置かなければなりません。そうでなければ、それは一度だけ初期化されます。 –

+0

ああ、そうですが、それでも動作しません:/ –

+0

問題点は何ですか?私は今プレイグラウンドであなたの機能を実行していて、毎回ユニークな値を表示するようです。この機能が動作しないと言っていますか? –

答えて

1
let wait = SKAction.wait(forDuration: getRandomDelay()) 
let sequence = SKAction.sequence([runObstSwitch, wait]) 

は、一度waitアクションを作成します というシーケンスで使用されるので、同じ量のアイドル時間がrunObstSwitch アクションの間に費やされます。

アイドル時間を可変にする場合は、代わりに wait(forDuration:withRange:)を使用してください。

let wait = SKAction.wait(forDuration: 1.5, withRange: 2.0) 
let sequence = SKAction.sequence([runObstSwitch, wait]) 

と、例えば遅延は1.5~2.0/2の間の乱数= 0.5、1.5 + 2.0/2 = 2.5秒、各実行のために変化するであろう。

+0

ありがとう!多くの助けをした –

関連する問題