2011-09-06 84 views
0

我正在開發一個小的XNA遊戲,隨機和種子,生成相同的值?

for (int birdCount = 0; birdCount < 20; birdCount++) 
      { 
       Bird bird = new Bird(); 
       bird.AddSpriteSheet(bird.CurrentState, birdSheet); 
       BIRDS.Add(bird); 
      } 

上面的代碼在加載函數運行,鳥類是所有鳥都舉行的清單。

鳥構造函數隨機定製鳥。如果我通過breakPoint運行代碼breakPoint,隨機函數會生成不同的值,但是如果我不停止代碼並使程序運行,則所有隨機值都變爲相同,以便所有的鳥變得相同。

我該如何解決這個問題?

隨機和種子代碼:

private void randomize() 
    { 
     Random seedRandom = new Random(); 
     Random random = new Random(seedRandom.Next(100)); 
     Random random2 = new Random(seedRandom.Next(150)); 

     this.CurrentFrame = random.Next(0, this.textures[CurrentState].TotalFrameNumber - 1); 

     float scaleFactor = (float)random2.Next(50, 150)/100; 
     this.Scale = new Vector2(scaleFactor, scaleFactor); 

     // more codes ... 

     this.Speed = new Vector2(2f * Scale.X, 0); 
     this.Acceleration = Vector2.Zero; 
    } 
+0

請顯示您用來生成隨機和種子的代碼... – Yahia

回答

6

機會是你重複創建代碼中的新Random對象 - 而不是隻創建一次(通過使靜態或傳遞,即在Random對象作爲一個參數)

由於Random默認的構造使用當前時間作爲初始種子,並用相同的種子的Random所有實例創建號碼創建新相同的序列快速排序的3210個對象可能會產生相同的數字序列。這聽起來像你所看到的。

+0

謝謝!靜態randoms已經解決了這個問題,我讓隨機和種子創建一次,所以我有隨機隨機鳥:) – icaptan

+0

@icaptan:是的,你可以創建一個'私人靜態隨機random = new Random();'字段在你的鳥類,然後總是在你的代碼中使用它 - 我也沒有看到你的seedRandom,random,random2變量 - 你只需要一個。 – BrokenGlass

+0

再次感謝BrokenGlass,你幫了很多忙,我馬上做了。 – icaptan

相關問題