随机和种子,生成相同的值?

ica*_*tan 0 c# random xna

我正在开发一个小型XNA游戏,

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

上面的代码在Load函数中运行,BIRDS是所有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;
    }
Run Code Online (Sandbox Code Playgroud)

Bro*_*ass 6

有可能你Random在代码中反复创建一个新对象 - 而只是创建一次Random对象(即通过使其静态或将其作为参数传递)

由于Random默认构造函数使用当前时间作为初始种子,并且Random具有相同种子的所有实例创建相同的数字序列,因此Random以快速顺序创建新对象可能会生成相同的精确数字序列.这听起来像你所看到的.