RandomNumberGenerator

Наследует: RefCounted < Object

Предоставляет методы генерации псевдослучайных чисел.

Описание

RandomNumberGenerator — это класс для генерации псевдослучайных чисел. В настоящее время он использует PCG32.

Примечание: Базовый алгоритм является деталью реализации и не должен зависеть от него.

Для генерации случайного числа с плавающей точкой (в заданном диапазоне) на основе зависящего от времени начального числа:

var rng = RandomNumberGenerator.new()
func _ready():
var my_random_number = rng.randf_range(-10.0, 10.0)

Обучающие материалы

Свойства

int

seed

0

int

state

0

Методы

int

rand_weighted(weights: PackedFloat32Array)

float

randf()

float

randf_range(from: float, to: float)

float

randfn(mean: float = 0.0, deviation: float = 1.0)

int

randi()

int

randi_range(from: int, to: int)

void

randomize()


Описания свойств

int seed = 0 🔗

  • void set_seed(value: int)

  • int get_seed()

Инициализирует состояние генератора случайных чисел на основе заданного начального значения. Заданное начальное значение даст воспроизводимую последовательность псевдослучайных чисел.

Примечание: RNG не имеет лавинного эффекта и может выводить похожие случайные потоки при наличии похожих начальных значений. Рассмотрите возможность использования хэш-функции для улучшения качества начальных значений, если они получены извне.

Примечание: Установка этого свойства приводит к побочному эффекту изменения внутреннего state, поэтому обязательно инициализируйте начальное значение перед изменением state:

Примечание: Значение этого свойства по умолчанию — псевдослучайное и изменяется при вызове randomize(). Значение 0, задокументированное здесь, является заполнителем, а не фактическим начальным числом по умолчанию.

var rng = RandomNumberGenerator.new()
rng.seed = hash("Godot")
rng.state = 100 # Restore to some previously saved state.

int state = 0 🔗

  • void set_state(value: int)

  • int get_state()

Текущее состояние генератора случайных чисел. Сохраните и восстановите это свойство, чтобы восстановить генератор в предыдущее состояние:

var rng = RandomNumberGenerator.new()
print(rng.randf())
var saved_state = rng.state # Сохранить текущее состояние.
print(rng.randf()) # Продвинутое внутреннее состояние.
rng.state = saved_state # Восстановите состояние.
print(rng.randf()) # Печатает то же значение, что и ранее.

Примечание: Не устанавливайте state в произвольные значения, так как генератор случайных чисел требует, чтобы состояние имело определенные качества для правильного поведения. Его следует устанавливать только в значения, которые получены из самого свойства state. Чтобы инициализировать генератор случайных чисел с произвольным вводом, используйте вместо этого seed.

Примечание: Значение этого свойства по умолчанию — псевдослучайное и изменяется при вызове randomize(). Значение 0, задокументированное здесь, является заполнителем, а не фактическим состоянием по умолчанию.


Описания метода

int rand_weighted(weights: PackedFloat32Array) 🔗

Возвращает случайный индекс с неравномерными весами. Выводит ошибку и возвращает -1, если массив пуст.

var rng = RandomNumberGenerator.new()

var my_array = ["one", "two", "three", "four"]
var weights = PackedFloat32Array([0.5, 1, 1, 2])

# Выводит один из четырех элементов в `my_array`.
# Скорее всего, выведется "four", и менее вероятно, что выведется "one".
print(my_array[rng.rand_weighted(weights)])

float randf() 🔗

Возвращает псевдослучайное число с плавающей точкой между 0.0 и 1.0 (включительно).


float randf_range(from: float, to: float) 🔗

Возвращает псевдослучайное число с плавающей точкой между from и to (включительно).


float randfn(mean: float = 0.0, deviation: float = 1.0) 🔗

Возвращает нормально распределенное, псевдослучайное число с плавающей точкой из указанного mean и стандартного offset. Это также известно как распределение Гаусса.

Примечание: Этот метод использует алгоритм преобразование Box-Muller.


int randi() 🔗

Возвращает псевдослучайное 32-битное целое число без знака в диапазоне от 0 до 4294967295 (включительно).


int randi_range(from: int, to: int) 🔗

Возвращает псевдослучайное 32-битное целое число со знаком в диапазоне от from до to (включительно).


void randomize() 🔗

Устанавливает основанное на времени начальное значение для этого экземпляра RandomNumberGenerator. В отличие от функций генерации случайных чисел @GlobalScope, разные экземпляры RandomNumberGenerator могут использовать разные начальные значения.