Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
RandomNumberGenerator
Наследует: RefCounted < Object
Предоставляет методы генерации псевдослучайных чисел.
Описание
RandomNumberGenerator — это класс для генерации псевдослучайных чисел. В настоящее время он использует PCG32.
Примечание: Базовый алгоритм является деталью реализации и не должен зависеть от него.
Для генерации случайного числа с плавающей точкой (в заданном диапазоне) на основе зависящего от времени начального числа:
var rng = RandomNumberGenerator.new()
func _ready():
var my_random_number = rng.randf_range(-10.0, 10.0)
Обучающие материалы
Свойства
|
||
|
Методы
rand_weighted(weights: PackedFloat32Array) |
|
randf() |
|
randf_range(from: float, to: float) |
|
randi() |
|
randi_range(from: int, to: int) |
|
void |
Описания свойств
Инициализирует состояние генератора случайных чисел на основе заданного начального значения. Заданное начальное значение даст воспроизводимую последовательность псевдослучайных чисел.
Примечание: Генератор случайных чисел (RNG) не имеет эффекта лавины и может выдавать похожие потоки случайных чисел при одинаковых начальных значениях. Рекомендуется использовать хеш-функцию для улучшения качества начальных значений, если они получены извне.
Примечание: Значение по умолчанию для этого свойства — псевдослучайное, и оно изменяется при вызове randomize(). Значение 0, указанное здесь, является заполнителем, а не фактическим начальным значением по умолчанию.
Примечание: Установка этого свойства приводит к побочному эффекту — изменению внутреннего state, поэтому убедитесь, что вы инициализировали начальное значение перед изменением state:
var rng = RandomNumberGenerator.new()
rng.seed = hash("Godot")
rng.state = 100 # Восстановить до ранее сохраненного состояния.
Текущее состояние генератора случайных чисел. Сохраните и восстановите это свойство, чтобы восстановить генератор в предыдущее состояние:
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) 🔗
Returns a random integer between 0 and the size of the array that is passed as a parameter. Each value in the array should be a non-negative floating-point number that represents the relative likelihood that it will be returned as an index. A higher value means the value is more likely to be returned as an index, while a value of 0 means it will never be returned as an index.
For example, if [0.5, 1, 1, 2] is passed as a parameter, then the method is twice as likely to return 3 (the index of the value 2) and twice as unlikely to return 0 (the index of the value 0.5) compared to the indices 1 and 2.
Prints an error and returns -1 if the array is empty or contains any negative values.
var rng = RandomNumberGenerator.new()
var my_array = ["one", "two", "three", "four"]
var weights = PackedFloat32Array([0.5, 1, 1, 2])
# Prints one of the four elements in `my_array`.
# It is more likely to print "four", and less likely to print "one".
print(my_array[rng.rand_weighted(weights)])
Возвращает псевдослучайное число с плавающей точкой между 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.
Возвращает псевдослучайное 32-битное целое число без знака в диапазоне от 0 до 4294967295 (включительно).
int randi_range(from: int, to: int) 🔗
Возвращает псевдослучайное 32-битное целое число со знаком в диапазоне от from до to (включительно).
void randomize() 🔗
Устанавливает основанное на времени начальное значение для этого экземпляра RandomNumberGenerator. В отличие от функций генерации случайных чисел @GlobalScope, разные экземпляры RandomNumberGenerator могут использовать разные начальные значения.