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 |
属性说明¶
根据给定的种子值初始化随机数生成器状态。给定的种子将生成可重现的伪随机数序列。
注意:随机数生成器没有雪崩效应,在给定相似种子的情况下可能会输出相似的随机流。如果种子来自外部,考虑使用哈希函数来提高种子质量。
注意:设置此属性会产生更改内部state的副作用,因此请确保在修改state之前初始化种子。
注意:此属性的默认值是伪随机的,在调用randomize()时会发生变化。此处记录的0值是一个占位符,并非实际的默认种子。
var rng = RandomNumberGenerator.new()
rng.seed = hash("i3D")
rng.state = 100 # 恢复到之前保存的某个状态。
随机数生成器的当前状态。保存并恢复此属性,可将生成器恢复到先前状态:
var rng = RandomNumberGenerator.new()
print(rng.randf())
var saved_state = rng.state # Store current state.
print(rng.randf()) # 使用自定义曲线来插值该值。提升内部状态。
rng.state = saved_state # Restore the 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` 中的其中一个元素。
# 它更有可能打印出 "four", 而不太可能打印出 "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) 🔗
返回normally-distributed、指定mean的伪随机浮点数和标准deviation。这也称为高斯分布。
注意:此方法使用Box-Muller变换算法。
返回0和4294967295(含)之间的伪随机32位无符号整数。
int randi_range(from: int, to: int) 🔗
返回from和to(含)之间的伪随机32位有符号整数。
void randomize() 🔗
为此RandomNumberGenerator实例设置基于时间的种子。与@GlobalScope随机数生成函数不同,不同的RandomNumberGenerator实例可以使用不同的种子。