RandomNumberGenerator

Eredita: RefCounted < Object

Fornisce metodi per generare numeri pseudocasuali.

Descrizione

RandomNumberGenerator è una classe per generare numeri pseudocasuali. Attualmente utilizza PCG32.

Nota: L'algoritmo sottostante è un dettaglio di implementazione e non ci si dovrebbe basare su di esso.

Per generare un numero float casuale (entro un dato intervallo) basato su un seed dipendente dal tempo:

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

Tutorial

Proprietà

int

seed

0

int

state

0

Metodi

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()


Descrizioni delle proprietà

int seed = 0 🔗

  • void set_seed(value: int)

  • int get_seed()

Inizializza lo stato del generatore di numeri casuali in base al valore del seed specificato. Un seed specificato fornirà una sequenza riproducibile di numeri pseudocasuali.

Nota: L'RNG non ha un effetto valanga e può generare serie di risultati simili, se forniti seed simili. Considera di utilizzare una funzione hash per migliorare la qualità dei tuoi seed se provengono esternamente.

Nota: L'impostazione di questa proprietà produce un effetto collaterale di modifica dello state interno, quindi assicurati di inizializzare il seed prima di modificare lo state:

Nota: Il valore predefinito di questa proprietà è pseudocasuale e cambia quando si chiama randomize(). Il valore 0 documentato qui è un segnaposto e non il seed predefinito effettivo.

var rng = RandomNumberGenerator.new()
rng.seed = hash("Godot")
rng.state = 100 # Ripristina uno stato salvato in precedenza.

int state = 0 🔗

  • void set_state(value: int)

  • int get_state()

Lo stato attuale del generatore di numeri casuali. Salva e ripristina questa proprietà per ripristinare il generatore a uno stato precedente:

var rng = RandomNumberGenerator.new()
print(rng.randf())
var saved_state = rng.state # Memorizza lo stato attuale.
print(rng.randf()) # Avanza lo stato interno.
rng.state = saved_state # Ripristina lo stato.
print(rng.randf()) # Stampa lo stesso valore di prima.

Nota: Non impostare lo stato su valori arbitrari, poiché il generatore di numeri casuali richiede che lo stato abbia determinate qualità per comportarsi correttamente. Dovrebbe essere impostato solo su valori che provengono dalla proprietà dello stato stessa. Per inizializzare il generatore di numeri casuali con input arbitrari, usa invece seed.

Nota: Il valore predefinito di questa proprietà è pseudocasuale e cambia quando si chiama randomize(). Il valore 0 qui documentato è un segnaposto e non lo stato predefinito effettivo.


Descrizioni dei metodi

int rand_weighted(weights: PackedFloat32Array) 🔗

Restituisce un indice casuale con pesi non uniformi. Stampa un errore e restituisce -1 se l'array è vuoto.

var rng = RandomNumberGenerator.new()

var mio_array = ["uno", "due", "tre", "quattro"]
var pesi = PackedFloat32Array([0.5, 1, 1, 2])

# Stampa uno dei quattro elementi in `mio_array`.
# È più probabile che stampi "quattro" e meno probabile che stampi "uno".
print(mio_array[rng.rand_weighted(pesi)])

float randf() 🔗

Restituisce un numero float pseudocasuale compreso tra 0.0 e 1.0 (inclusi).


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

Restituisce un numero float pseudocasuale compreso tra from e to (inclusi).


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

Restituisce un numero in virgola mobile pseudo-casuale normalmente distribuito dalla media (mean) specificata e una deviazione (deviation) standard. Questa è anche nota come distribuzione gaussiana.

Nota: Questo metodo utilizza l'algoritmo trasformazione di Box-Muller.


int randi() 🔗

Restituisce un intero pseudocasuale senza segno a 32 bit compreso tra 0 e 4294967295 (inclusi).


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

Restituisce un intero pseudocasuale con segno a 32 bit compreso tra from e to (inclusi).


void randomize() 🔗

Imposta un seed basato sul tempo per questa istanza di RandomNumberGenerator. A differenza delle funzioni di generazione di numeri casuali @GlobalScope, diverse istanze di RandomNumberGenerator possono usare seed diversi.