RandomNumberGenerator

Inherits: Reference < Object

一个用于生成伪随机数的类。

描述

RandomNumberGenerator 是一个用于生成伪随机数的类。它目前使用 PCG32

注:底层算法是实现细节。因此,跨 Godot 版本的可重复随机流不应该依赖于此。

要根据时间相关种子生成随机浮点数,在给定范围内:

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

注: seedstate 属性的默认值是伪随机的,在调用randomize 时会发生变化。此处记录的 0 值是一个占位符,而不是实际的默认种子。

属性

int

seed

0

int

state

0

方法

float

randf ( )

float

randf_range ( float from, float to )

float

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

int

randi ( )

int

randi_range ( int from, int to )

void

randomize ( )

属性说明

Default

0

Setter

set_seed(value)

Getter

get_seed()

根据给定的种子值初始化随机数生成器状态。给定的种子将提供可重复的伪随机数序列。

注: RNG 没有雪崩效应,可以输出相似的随机流给定相似的种子。如果种子来自外部,请考虑使用哈希函数来提高种子质量。

注:设置这个属性会产生改变内部state的副作用,所以一定要在修改state之前初始化种子:

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

警告:该属性的getter返回之前的state,而不是初始种子值,这将在Godot 4.0中修复。


Default

0

Setter

set_state(value)

Getter

get_state()

随机数生成器的当前状态。保存并恢复此属性,以将生成器恢复到之前的状态:

var rng = RandomNumberGenerator.new()
print(rng.randf())
var saved_state = rng.state # Store current state.
print(rng.randf()) # Advance internal state.
rng.state = saved_state # Restore the state.
print(rng.randf()) # Prints the same value as in previous.

注意: 不要将状态设置为任意值,因为随机数生成器要求状态具有某些特性才能正常运行。它应该只设置为来自状态属性本身的值。要使用任意输入初始化随机数生成器,请改用 seed

方法说明

产生一个0.01.0(包括端点)之间的伪随机浮点数。


产生一个fromto(包括端点)之间的伪随机浮点数。


产生一个正态分布的伪随机数,使用Box-Muller变换,具有指定的mean和标准deviation。这也被称为高斯分布。


  • int randi ( )

产生一个04294967295(含端点)之间的伪随机32位无符号整数。


产生一个tofrom(含端点)之间的伪随机32位有符号整数。


  • void randomize ( )

为生成器设置一个基于时间的种子。