2016-01-20 76 views
2

如何讓隨機數在程序中隨時間變化(每當我想使用它時,我都會在該範圍內成爲新的隨機數)?瞭解iOS中的隨機數Swift 2

我很難過。我已經閱讀了20多篇關於如何使用這種語言生成隨機數的不同文章和文章(我很新),而且我似乎無法使其發揮作用。

我基本上試圖從1.0-3.0得到一個隨機double。我可以很容易地做到這一點,但一旦它選擇了這個數字,它就不會改變。這是我的代碼,我使用:

var randomNumber:Double = (Double(arc4random() % 3) + 1); 

然後我用這個作爲線的值:

SKAction.waitForDuration(randomNumber) 

每次我運行此我想再次更改號碼,但一旦程序開始它繼續相同的號碼(這是不同的每次我重置程序)

我明白如何生成號碼,但我似乎無法找到任何更新它!

我已經嘗試添加

randomNumber = (Double(arc4random() % 3) + 1); 

成在將跑很多次點的代碼,但它仍然給了我同樣的事情。

我對C++非常熟悉,所以如果你想解釋一些東西,你可以參考它的風格,我很可能會理解。

+0

記住'randomNumber'是一個變量,而不是函數指針,所以當你說'SKAction。waitForDuration(randomNumber)'你真的在說var'randomNumber = 3; SKAction.waitForDuration(3)'每次。你需要先創建一個新的隨機數,然後用這個新的隨機數做一個新的waifForDuration,並將這個新的動作添加到精靈 – Knight0fDragon

回答

1

用途:

SKAction.waitForDuration(sec: NSTimeInterval, withRange: NSTimeInterval) 

其中秒是時間,你要使用的範圍的中間,因爲那張範圍在+ - 的方向。

所以你的情況,你想:

SKAction.waitForDuration(2, withRange: 2), this will get you a range of 1 to 3 (-1 to 1 range) 

如果由於某種原因,你需要將不斷創造新的隨機等待的方法,你總是可以做:

extension SKAction 
{ 
    func waitForRandomDuration() -> SKAction 
    { 
     var randomNumber:Double = (Double(arc4random() % 3) + 1); 
     return SKAction.waitForDuration(randomNumber); 

    } 
} 

然後make當你需要完成這些工作時,確保你把它作爲一個新的動作添加到你的精靈中,如果你把它存儲到一個變量中,你的隨機性不會改變。

+0

這看起來不錯,但我怎麼impliment它變成一個SKAction序列的方法靜態?當我做' SKAction.waitForRandomDuration()'我得到的錯誤:「缺少呼籲參數#1的說法」我會輸入哪些參數 – MarshallD

+0

我更新我的回答對你想要做什麼,我差點忘了withRange條款我不知道你爲什麼會想念你g參數錯誤,雖然當使用我的方法 – Knight0fDragon

+0

現在這個更新我得到錯誤'「無關的參數標籤'秒:'在調用中''所以我試圖省略,它的工作!謝謝!! – MarshallD

0

試試這個代碼:

func randomNumberBetween1_0And3_0() -> Double { 
    return 1 + Double(arc4random_uniform(2000))/1000.0 
} 

for index in 1...10 { 
    print(randomNumberBetween1_0And3_0()) 
} 

示例輸出: 2.087 1.367 1.867 1.32 2.402 1.803 1.325 1.703 2.069 2.335

2

你需要的是一個讀只計算每次嘗試訪問它時都會返回一個新隨機數的屬性:

var randomNumber: Double { 
    return Double(arc4random_uniform(3).successor()) 
} 

print(randomNumber) // 2.0 
print(randomNumber) // 2.0 
print(randomNumber) // 1.0 
print(randomNumber) // 3.0 
print(randomNumber) // 3.0 
+0

謝謝!這樣做更有意義,唯一的問題是我認爲我可能會遇到更具體的問題。我使用 'runAction(SKAction.repeatActionForever( SKAction.sequence([ SKAction.runBlock(addMonster), SKAction.waitForDuration(randomNumber) ])' 但是當我用你的代碼,我仍然得到同樣的號。任何想法? – MarshallD

+0

唯一的問題是我的方法也不行,因爲其返回的行動將是他在使用它 – Knight0fDragon