RandomNumberGenerator
一个用于生成伪随机数的类。
描述
RandomNumberGenerator 是一个用于生成伪随机数的类。它目前使用 PCG32。
注:底层算法是实现细节。因此,跨 Godot 版本的可重复随机流不应该依赖于此。
要根据时间相关种子生成随机浮点数,在给定范围内:
var rng = RandomNumberGenerator.new()
func _ready():
rng.randomize()
var my_random_number = rng.randf_range(-10.0, 10.0)
注: seed 和 state 属性的默认值是伪随机的,在调用randomize 时会发生变化。此处记录的 0
值是一个占位符,而不是实际的默认种子。
教程
属性
| ||
|
方法
randf ( ) | |
randf_range ( float from, float to ) | |
randi ( ) | |
randi_range ( int from, int to ) | |
void | randomize ( ) |
属性说明
- int seed
Default |
|
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中修复。
- int state
Default |
|
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。
方法说明
- float randf ( )
产生一个0.0
和1.0
(包括端点)之间的伪随机浮点数。
产生一个from
和to
(包括端点)之间的伪随机浮点数。
产生一个正态分布的伪随机数,使用Box-Muller变换,具有指定的mean
和标准deviation
。这也被称为高斯分布。
- int randi ( )
产生一个0
和4294967295
(含端点)之间的伪随机32位无符号整数。
产生一个to
和from
(含端点)之间的伪随机32位有符号整数。
- void randomize ( )
为生成器设置一个基于时间的种子。