Моя функция C # XNA random () не возвращает значения, которые я бы хотел? - PullRequest
3 голосов
/ 16 сентября 2011

Я знаю, что функция random () в C # использует часы процессора для возврата его значений, вскоре мне пришлось сделать несколько трюков, чтобы заставить его возвращать разные значения за короткий промежуток времени.Теперь произошло что-то новое: я могу вернуть несколько разных значений, но это не совсем «случайно».

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

spawnMsCounter += gt.ElapsedGameTime.Milliseconds;
        if (spawnMsCounter > 1)
        {
            spawnMsCounter -= 1;
            random = new Random();
            float x = random.Next(-1, game.Window.ClientBounds.Width);
            int y = random.Next(-1,random.Next(1,game.Window.ClientBounds.Height));
            Coins.Add(new Coin(coinTexture,x,y));
        }

И я получил это: http://img62.imageshack.us/img62/4783/khrogbeta20110916154637.png

Как вы можете видеть, большинство точек появляются в верхней частиэкран;Зачем?И как исправить - или создать лучший код из - этого?

Ответы [ 2 ]

5 голосов
/ 16 сентября 2011

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

2 голосов
/ 17 сентября 2011

Вы должны повторно использовать ваши случайные объекты, но я полагаю, что причина, по которой монеты имеют тенденцию появляться в верхней части, заключается в следующей строке кода:

int y = random.Next(-1,random.Next(1,game.Window.ClientBounds.Height));

Сначала вы генерируете случайное число от 1 довысота вашего клиента, а затем использовать его в качестве границы для генерации другого случайного числа от -1 до первого сгенерированного значения.Поскольку второе значение всегда будет меньше или равно первому сгенерированному значению, более низкие значения более вероятны, чем более высокие (и на самом деле ваша картина показывает примерно то распределение, которое можно ожидать).Для равномерного распределения вам необходимо:

int y = random.Next(-1,game.Window.ClientBounds.Height);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...