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 не має ефекту лавини та може виводити подібні випадкові потоки за подібних початкових значень. Подумайте про використання хеш-функції, щоб покращити якість початкового матеріалу, якщо вони отримані ззовні.

**Примітка: ** Налаштування цієї властивості створює побічний ефект зміни внутрішнього стану-члена, тому переконайтеся, що ініціалізували початкове значення перед зміною стану-члена:

Примітка: Значення за замовчуванням цієї властивості є псевдовипадковим і змінюється під час виклику randomize(). Значення 0, задокументоване тут, є заповнювачем, а не фактичним початковим значенням за замовчуванням.

var rng = RandomNumberGenerator.new()
rng.seed = hash("Godot")
rng.state = 100 # Відновлення попереднього збереженого стану.

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()) # Друкує те саме значення, що й раніше.

Примітка: Не встановлюйте для стану довільні значення, оскільки генератор випадкових чисел вимагає певних якостей для належної роботи. Його слід встановлювати лише значення, отримані з самої властивості стану. Щоб ініціалізувати генератор випадкових чисел довільними вхідними даними, використовуйте замість цього 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`.
# Ймовірніше надрукувати «чотири», а рідше надрукувати «один».
print(my_array[rng.rand_weighted(weights)])

float randf() 🔗

Повертає псевдо-рандом float між 0.0 і 1.0 (включаючи).


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

Повертає псевдо-рандом, плаваючи між паром і парм до (включно).


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

Повертає нормально розподілене псевдовипадкове число з плаваючою комою з заданого mean та стандартного deviation. Це також відоме як гаусівський розподіл.

Примітка: Цей метод використовує алгоритм перетворення Бокса-Мюллера.


int randi() 🔗

Повертає псевдо-рандом 32-бітове ціле між 0 і 4294967295 (включаючи).


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

Повертає псевдо-рандом 32-біт, підписаний цілим між парм і парм до (включно).


void randomize() 🔗

Налаштовує часову насінню для цього RandomКількістьGenerator. На відміну від @GlobalScope функції випадкових чисел, різні RandomКількістьGenerator екземпляри можуть використовувати різні насіння.