2011-09-06 52 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

相关问题