Случайное и семя, генерирует одинаковое значение? - PullRequest
0 голосов
/ 07 сентября 2011

Я разрабатываю небольшую игру XNA,

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

Приведенный выше код работает с функцией Load, BIRDS - это список, в котором содержатся все птицы.

Конструктор птиц настраивает птицу случайным образом. Если я запускаю код 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;
    }

1 Ответ

6 голосов
/ 07 сентября 2011

Скорее всего, вы неоднократно создаете новый объект Random в своем коде - вместо этого создайте Random объект только один раз (т.е. сделав его статическим или передав его в качестве параметра)

Поскольку конструктор по умолчанию Random использует текущее время в качестве начального начального числа, и все экземпляры Random с одним и тем же начальным числом создают одинаковую последовательность чисел, создавая новые объекты Random в быстром порядке, может получиться та же самая точная последовательность номера. Это похоже на то, что вы видите.

...