В библиотеке Phaser для работы со случайными значениями используется объект Phaser.Math.RND, предоставляющий набор методов для генерации случайных чисел, случайных элементов из массивов и выполнения вероятностных выборок. Этот объект основан на генераторе псевдослучайных чисел и позволяет обеспечить как простую случайность, так и повторяемость последовательностей через управление семенем (seed).
Объект RND создаётся автоматически при запуске игры, поэтому явной инициализации не требуется:
const rnd = Phaser.Math.RND;
Для повторяемой случайности используется метод seed, который задаёт начальное значение генератора. Это позволяет получать одинаковые последовательности случайных чисел при каждом запуске с одним и тем же семенем:
rnd.seed = 12345;
console.log(rnd.integerInRange(1, 10)); // Всегда одно и то же число при заданном семени
Ключевой момент: без установки семени последовательность случайных чисел будет отличаться при каждом запуске.
const value = rnd.integer();
const value = rnd.integerInRange(5, 15);
const value = rnd.real();
const value = rnd.realInRange(10, 20);
const offset = rnd.realSpread(100); // Значение от -50 до 50
Методы для работы с массивами позволяют извлекать случайные элементы или перемешивать массив:
const colors = ['red', 'green', 'blue'];
const color = rnd.pick(colors);
weights должен совпадать по длине с
array:const items = ['gold', 'silver', 'bronze'];
const weights = [5, 3, 2]; // вероятности 50%, 30%, 20%
const item = rnd.weightedPick(items, weights);
const numbers = [1, 2, 3, 4, 5];
rnd.shuffle(numbers);
console.log(numbers); // Массив в случайном порядке
const items = ['apple', 'banana', 'cherry'];
const removed = rnd.remove(items);
console.log(removed, items); // удалённый элемент и оставшийся массив
true с
вероятностью percent (от 0 до 100):if (rnd.chance(25)) {
console.log('Событие произошло с вероятностью 25%');
}
integerInRange):const number = rnd.integerInRange(1, 10);
if (rnd.between(1, 5)) {
console.log('Число в диапазоне 1–5');
}
RND активно используется для:
const x = rnd.between(100, 700);
const y = rnd.between(50, 550);
this.add.sprite(x, y, 'star');
enemy.speed = rnd.realInRange(50, 150);
enemy.direction = rnd.pick(['left', 'right']);
const loot = rnd.weightedPick(['coin', 'gem', 'heart'], [70, 20, 10]);
rnd.shuffle(levelTiles);
Преимущество Phaser.Math.RND в том, что все случайные действия становятся контролируемыми и предсказуемыми при задании семени, что критично для повторяемых игровых сценариев, тестирования и процедурной генерации.
pick и shuffle удобны для случайной
расстановки объектов и генерации контента без ручного перебора.Phaser.Math.RND предоставляет полный набор инструментов для всех типов случайных вычислений в играх, от простых чисел до сложных вероятностных выборок и процедурной генерации контента.