@GDScript¶
类别: 核心
简要说明¶
内置gdscript函数。
方法¶
无效 |
|
bytes2var ( PoolByteArray bytes, bool allow_objects=false ) |
|
cartesian2polar ( float x, float y ) |
|
dict2inst ( Dictionary dict ) |
|
get_stack ( ) |
|
instance_from_id ( int instance_id ) |
|
inverse_lerp ( float from, float to, float weight ) |
|
is_equal_approx ( float a, float b ) |
|
is_instance_valid ( Object instance ) |
|
is_zero_approx ( float s ) |
|
lerp_angle ( float from, float to, float weight ) |
|
move_toward ( float from, float to, float delta ) |
|
nearest_po2 ( int value ) |
|
parse_json ( String json ) |
|
polar2cartesian ( float r, float th ) |
|
无效 |
print ( ... ) vararg |
无效 |
print_debug ( ... ) vararg |
无效 |
print_stack ( ) |
无效 |
printerr ( ... ) vararg |
无效 |
printraw ( ... ) vararg |
无效 |
prints ( ... ) vararg |
无效 |
printt ( ... ) vararg |
无效 |
push_error ( String message ) |
无效 |
push_warning ( String message ) |
rand_range ( float from, float to ) |
|
randf ( ) |
|
randi ( ) |
|
无效 |
randomize ( ) |
range ( ... ) vararg |
|
range_lerp ( float value, float istart, float istop, float ostart, float ostop ) |
|
无效 |
|
smoothstep ( float from, float to, float weight ) |
|
step_decimals ( float step ) |
|
str ( ... ) vararg |
|
type_exists ( String type ) |
|
validate_json ( String json ) |
|
常量¶
PI = 3.141593 ---一个常数,它表示一个圆的直径是它周长的几倍。
TAU = 6.283185 ——圆常数,单位圆的周长。
INF = inf ——正无穷大。(对于负无穷大,使用-inf)。
NAN = nan ---宏常量,扩展为表示NaN的float类型表达式。
NaN值用于标识浮点元素的未定义或不可表示的值,例如负数的平方根或0/0的结果。
描述¶
核心内置gdscript函数的列表。数学函数和其他实用程序。其他一切都是由对象提供的。(关键词:内置、内置、全局函数。)
方法说明¶
返回带有红色、绿色、蓝色和阿尔法通道的32位颜色。每个通道有8位信息,范围从0到255。
r8
红色通道
g8
绿色通道
b8
蓝色通道
a8
阿尔法通道
red = Color8(255, 0, 0)
根据标准化的 name
具有 alpha
范围从0到1。
red = ColorN("red", 1)
支持的颜色名称:
“aliceblue”、“antiquewite”、“aqua”、“aquamarine”、“azure”、“beige”、“bisque”、“black”、“blanchedalmond”、“blue”、“blue紫罗兰”、“brown”、“burlywood”、“cadetblue”、“chartreuse”、“chocolate”、“coral”、“cornflower”、“cornsylor”、“crimson”、“青色”、“darkblue”、“darkbluendrod”、“darkgray”、““深绿色”、“深卡其色”、“深洋红”、“深橄榄绿”、“深橙色”、“深兰花色”、“深红色”、“深鲑鱼色”、“深海绿”、“深石板蓝”、“深石板蓝”、“深青绿色”、“深紫色”、“深紫色”、“深蓝色”、“深灰色”、“道奇蓝”、“耐火砖”、“花白”、“森林绿”、“紫红色”、“G”Ainsboro“,”ghostwhite“,”gold“,”goldenrod“,”gray“,”webgray“,”green“,”webgreen“,”greenyellow“,”honeydew“,”hotpank“,”indianred“,”indigo“,”象牙“,”khaki“,”lavender“,”lavenderflush“,”lawgreen“,”lemonchiffon“,”lightblue“,”lightcoral“,”light青色“,”lightgoldenrod“,”lightgrat绿色,“浅粉色”,“浅三文鱼”,“浅海绿”,“浅天空蓝”,“浅石板蓝”,“浅钢蓝”,“浅黄色”,“石灰”,“柠檬绿”,“亚麻布”,“洋红”,“褐红”,“Webmaroon”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,“中海蓝”,nggreen“,”中绿松石“,”中绿松石“,”中蓝松石“,”薄荷糖“,”mistyrose“,”moccasin“,”navajowite“,”navyblue“,”oldlace“,”olive“,”olivedrab“,”orange“,”orangered“,”兰花“,”palegoldenrod“,”palegreen“,”淡绿松石“,”palevioletred“,”papapayawhip“,”peachpuff“,”秘鲁“,”pink“,”“,”李子“,”粉蓝色“,”紫色“,”webpurple“,”rebeccapurple“,”红色“,”rosybrown“,”royalblue“,”saddlebrown“,”鲑鱼“,”sanddybrown“,”海绿“,”贝壳“,”sienna“,”银色“,”天蓝色“,”slateblue“,”slateglay“,”雪“,”springgreen“,”steelblue“,”tan“,”teal“,”蓟“,”番茄“,”青绿色E“,”紫色“,”小麦“,”白色“,”白色“,”黄色“,”黄绿“。
返回参数的绝对值 s
(即无符号值,适用于整数和浮点)。
# a is 1
a = abs(-1)
返回的弧余弦 s
以弧度表示。用来得到余弦角 s
.
# c is 0.523599 or 30 degrees if converted with rad2deg(s)
c = acos(0.866025)
返回的弧正弦值 s
以弧度表示。用于获取正弦角度 s
.
# s is 0.523599 or 30 degrees if converted with rad2deg(s)
s = asin(0.5)
void assert ( bool condition )
断言 condition
是 true
. 如果 condition
是 false
,将生成一个错误并停止程序,直到您恢复它。仅在调试版本中执行,或在从编辑器运行游戏时执行。使用它进行调试,以确保语句 true
在开发过程中。
# Imagine we always want speed to be between 0 and 20
speed = -10
assert(speed < 20) # True, the program will continue
assert(speed >= 0) # False, the program will stop
assert(speed >= 0 && speed < 20) # You can also combine the two conditional statements in one check
返回的反正切值 s
以弧度表示。在三角法中,用它从一个角的正切处获得角度: atan(tan(angle)) == angle
.
该方法无法知道角度应该落在哪个象限。见 atan2 如果你总是想要一个准确的角度。
a = atan(0.5) # a is 0.463648
返回的反正切值 y/x
以弧度表示。用于获取相切角 y/x
. 为了计算该值,该方法考虑了两个参数的符号,以便确定象限。
a = atan2(0, -1) # a is 3.141593
Variant bytes2var ( PoolByteArray bytes, bool allow_objects=false )
将字节数组解码回一个值。什么时候? allow_objects
是 true
允许解码对象。
警告: 反序列化对象可以包含执行的代码。如果序列化对象来自不受信任的源,请不要使用此选项以避免潜在的安全威胁(远程代码执行)。
将以笛卡尔坐标系(X和Y轴)表示的二维点转换为极坐标系(距原点和角度的距离)。
查房 s
向上,返回不小于 s
.
i = ceil(1.45) # i is 2
i = ceil(1.001) # i is 2
以给定ASCII代码的字符串形式返回字符。
a = char(65) # a is "A"
a = char(65 + 32) # a is "a"
夹钳 value
并返回一个不小于 min
不超过 max
.
speed = 1000
# a is 20
a = clamp(speed, 1, 20)
speed = -10
# a is 1
a = clamp(speed, 1, 20)
以尽可能好的方式从一种类型转换为另一种类型。这个 type
参数使用枚举 TYPE_*
在里面 @GlobalScope .
a = Vector2(1, 0)
# Prints 1
print(a.length())
a = convert(a, TYPE_STRING)
# Prints 6 as "(1, 0)" is 6 characters
print(a.length())
返回角度的余弦值 s
弧度的
# Prints 1 then -1
print(cos(PI * 2))
print(cos(PI))
返回的双曲余弦 s
弧度的
# Prints 1.543081
print(cosh(1))
从分贝转换为线性能量(音频)。
的别名已弃用 step_decimals .
Returns the result of value
decreased by step
* amount
.
# a = 59
a = dectime(60, 10, 0.1))
返回转换为弧度的度数。
# r is 3.141593
r = deg2rad(180)
Object dict2inst ( Dictionary dict )
将以前转换的实例转换为字典,再转换为实例。用于反序列化。
基于指数的缓和函数。0是常量,1是线性的,0到1是易入的,1+是易出的。负值为in out/out in。
自然指数函数。它提高了数学常数 e 的力量 s
然后返回。
e 近似值为2.71828。
a = exp(2) # Approximately 7.39
查房 s
返回最接近的较小整数。
# a is 2
a = floor(2.99)
# a is -3
a = floor(-2.99)
返回的浮点余数 a/b
,保持 a
.
# Remainder is 1.5
var remainder = fmod(7, 5.5)
对于整数余数操作,请使用%运算符。
返回的浮点模 a/b
这在正负两个方面是一样的。
var i = -6
while i < 5:
prints(i, fposmod(i, 3))
i += 1
生产:
-6 0
-5 1
-4 2
-3 0
-2 1
-1 2
0 0
1 1
2 2
3 0
4 1
返回对指定函数的引用 funcname
在 instance
节点。由于函数不是gdscript中的第一类对象,请使用 funcref
存储 FuncRef 在一个变量中,稍后调用它。
func foo():
return("bar")
a = funcref(self, "foo")
print(a.call_func()) # Prints bar
Array get_stack ( )
返回表示当前调用堆栈的字典数组。
func _ready():
foo()
func foo():
bar()
func bar():
print(get_stack())
将打印
[{function:bar, line:12, source:res://script.gd}, {function:foo, line:9, source:res://script.gd}, {function:_ready, line:6, source:res://script.gd}]
返回所传递变量的整数哈希。
print(hash("a")) # Prints 177670
Dictionary inst2dict ( Object inst )
返回已转换为字典的传递实例(用于序列化)。
var foo = "bar"
func _ready():
var d = inst2dict(self)
print(d.keys())
print(d.values())
打印输出:
[@subpath, @path, foo]
[, res://test.gd, bar]
返回对应于 instance_id
. 所有对象都具有唯一的实例ID。
var foo = "bar"
func _ready():
var id = get_instance_id()
var inst = instance_from_id(id)
print(inst.foo) # Prints bar
返回考虑给定范围的规范化值。
inverse_lerp(3, 5, 4) # Returns 0.5
是否返回真/假 a
和 b
彼此大致相等。
是否返回 s
是无穷大值(正无穷大或负无穷大)。
是否返回 instance
是有效的对象(例如尚未从内存中删除)。
是否返回 s
是NaN(非数字)值。
是否返回真/假 s
等于或接近于零。
返回变量的长度 var
. 长度是字符串的字符数、数组的元素数、字典的大小等。
注: 如果变量不能提供长度,则生成致命错误。
a = [1, 2, 3, 4]
len(a) # Returns 4
通过标准化值在两个值之间进行线性插值。
如果 from
和 to
参数的类型为 int 或 float ,返回值为 float .
如果两者都是相同的向量类型 (Vector2 , Vector3 或 Color )返回值的类型相同。 (lerp
然后调用向量类型 linear_interpolate
方法)。
lerp(0, 4, 0.75) # Returns 3.0
lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Returns Vector2(2, 3.5)
用归一化值在两个角度(以弧度为单位)之间进行线性插值。
extends Sprite
var elapsed = 0.0
func _process(delta):
var min_angle = deg2rad(0.0)
var max_angle = deg2rad(90.0)
rotation = lerp_angle(min_angle, max_angle, elapsed)
elapsed += delta
从线性能量转换为分贝(音频)。
从位于的文件系统加载资源 path
.
注: 通过右键单击文件系统基座中的资源并选择 复制路径 .
# Load a scene called main located in the root of the project directory
var main = load("res://main.tscn")
自然对数。达到一定程度的持续增长所需的时间。
注: 这与大多数计算器上的“log”函数不同,后者使用以10为底的对数。
log(10) # Returns 2.302585
返回两个值的最大值。
max(1, 2) # Returns 2
max(-3.99, -4) # Returns -3.99
返回两个值的最小值。
min(1, 2) # Returns 1
min(-3.99, -4) # Returns -4
移动 from
朝向 to
由 delta
价值。
用负号 delta
要移动的值。
move_toward(10, 5, 4) # Returns 6
返回整数的最大2次方 value
.
nearest_po2(3) # Returns 4
nearest_po2(4) # Returns 4
nearest_po2(5) # Returns 8
将JSON文本解析为变量(使用 typeof 检查是否符合您的期望)。
请注意,JSON规范没有定义整数或浮点类型,而只定义数字类型。因此,解析JSON文本将把所有数值转换为 float 类型。
请注意,JSON对象不像godot字典那样保留键顺序,因此,如果字典是由JSON构造的,则不应依赖于键的顺序。相比之下,JSON数组保留元素的顺序:
p = parse_json('["a", "b", "c"]')
if typeof(p) == TYPE_ARRAY:
print(p[0]) # Prints a
else:
print("unexpected results")
转换用极坐标系表示的二维点(距原点的距离 r
还有一个角度 th
)笛卡尔坐标系(x和y轴)。
返回的整数模 a/b
这在正负两个方面是一样的。
var i = -6
while i < 5:
prints(i, posmod(i, 3))
i += 1
生产:
-6 0
-5 1
-4 2
-3 0
-2 1
-1 2
0 0
1 1
2 2
3 0
4 1
返回的结果 x
提升到 y
.
pow(2, 5) # Returns 32
返回在脚本分析期间从文件系统加载的资源。
注: 通过右键单击“资产”面板中的资源并选择“复制路径”,可以获得资源路径。
# Load a scene called main located in the root of the project directory
var main = preload("res://main.tscn")
void print ( ... ) vararg
以最佳方式将一个或多个参数转换为字符串,并将其打印到控制台。
a = [1, 2, 3]
print("a", "b", a) # Prints ab[1, 2, 3]
void print_debug ( ... ) vararg
喜欢 print ,但仅在调试模式下使用时打印。
void print_stack ( )
在代码位置打印堆栈跟踪,仅在启用了调试器的情况下运行时有效。
控制台中的输出如下所示:
Frame 0 - res://test.gd:16 in function '_process'
void printerr ( ... ) vararg
以标准错误行的最佳方式将一个或多个参数打印到字符串。
printerr("prints to stderr")
void printraw ( ... ) vararg
以控制台可能的最佳方式将一个或多个参数打印到字符串。结尾处不添加换行符。
printraw("A")
printraw("B")
# Prints AB
void prints ( ... ) vararg
将一个或多个参数打印到控制台,每个参数之间有一个空格。
prints("A", "B", "C") # Prints A B C
void printt ( ... ) vararg
将一个或多个参数打印到控制台,每个参数之间有一个选项卡。
printt("A", "B", "C") # Prints A B C
void push_error ( String message )
将错误消息推送到Godot的内置调试器和OS终端。
push_error("test error") # Prints "test error" to debugger and terminal as error call
void push_warning ( String message )
将警告消息推送到Godot的内置调试器和OS终端。
push_warning("test warning") # Prints "test warning" to debugger and terminal as warning call
从弧度转换为度数。
rad2deg(0.523599) # Returns 30
随机范围,介于 from
和 to
.
prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263
种子随机:通过A seed
,并返回一个同时具有数字和新种子的数组。“这里的seed指的是伪随机数生成器的内部状态。当前实现的内部状态是64位。
float randf ( )
返回间隔上的随机浮点值 [0, 1]
.
randf() # Returns e.g. 0.375671
int randi ( )
返回随机无符号32位整数。使用余数获取间隔中的随机值 [0, N]
(其中n小于2^32-1)。
randi() # Returns random integer between 0 and 2^32 - 1
randi() % 20 # Returns random integer between 0 and 19
randi() % 100 # Returns random integer between 0 and 99
randi() % 100 + 1 # Returns random integer between 1 and 100
void randomize ( )
随机数生成器的种子(或内部状态)。当前实现使用基于时间的数字重新设置。
func _ready():
randomize()
Array range ( ... ) vararg
返回具有给定范围的数组。范围可以是1个参数n(0到n-1)、两个参数(初始、最终-1)或三个参数(初始、最终-1、增量)。
for i in range(4):
print(i)
for i in range(2, 5):
print(i)
for i in range(0, 6, 2):
print(i)
输出:
0
1
2
3
2
3
4
0
2
4
地图A value
从范围 [istart, istop]
到 [ostart, ostop]
.
range_lerp(75, 0, 100, -1, 1) # Returns 0.5
返回最接近的整数值 s
,一半的病例从零开始四舍五入。
round(2.6) # Returns 3
void seed ( int seed )
为随机数生成器设置种子。
my_seed = "Godot Rocks"
seed(my_seed.hash())
返回的符号 s
:-1或1。返回0 if s
是0。
sign(-6) # Returns -1
sign(0) # Returns 0
sign(6) # Returns 1
返回角度的正弦值 s
弧度的
sin(0.523599) # Returns 0.5
返回的双曲正弦值 s
.
a = log(2.0) # Returns 0.693147
sinh(a) # Returns 0.75
返回在 from
和 to
,基于 weight
. 类似 lerp 但在开始时插入得更快,在结束时插入得更慢。
smoothstep(0, 2, 0.5) # Returns 0.15
smoothstep(0, 2, 1.0) # Returns 0.5
smoothstep(0, 2, 2.0) # Returns 1.0
返回的平方根 s
.
sqrt(9) # Returns 3
返回小数点后第一个非零数字的位置。请注意,最大返回值是10,这是实现中的设计决策。
# n is 0
n = step_decimals(5)
# n is 4
n = step_decimals(1.0005)
# n is 9
n = step_decimals(0.000000005)
捕捉浮动值 s
给一个给定的 step
.
String str ( ... ) vararg
以最佳方式将一个或多个参数转换为字符串。
var a = [10, 20, 30]
var b = str(a);
len(a) # Returns 3
len(b) # Returns 12
转换由返回的格式化字符串 var2str 到原始值。
a = '{ "a": 1, "b": 2 }'
b = str2var(a)
print(b["a"]) # Prints 1
返回角度的正切值 s
弧度的
tan(deg2rad(45)) # Returns 1
返回的双曲正切值 s
.
a = log(2.0) # Returns 0.693147
tanh(a) # Returns 0.6
转换变量 var
返回结果。用于将数据序列化为通过网络存储或发送。
a = { "a": 1, "b": 2 }
b = to_json(a)
print(b) # {"a":1, "b":2}
返回给定类是否存在于 ClassDB .
type_exists("Sprite") # Returns true
type_exists("Variant") # Returns false
返回给定变量对象的内部类型,使用 TYPE_*
枚举 @GlobalScope .
p = parse_json('["a", "b", "c"]')
if typeof(p) == TYPE_ARRAY:
print(p[0]) # Prints a
else:
print("unexpected results")
检查一下 json
是有效的JSON数据。如果有效,则返回空字符串。如果无效,则返回错误消息。
j = to_json([1, 2, 3])
v = validate_json(j)
if not v:
print("valid")
else:
prints("invalid", v)
PoolByteArray var2bytes ( Variant var, bool full_objects=false )
将变量值编码为字节数组。什么时候? full_objects
是 true
允许对对象进行编码(并且可能包括代码)。
转换变量 var
到一个格式化字符串,以后可以使用 str2var .
a = { "a": 1, "b": 2 }
print(var2str(a))
印刷品
{
"a": 1,
"b": 2
}
返回对对象的弱引用。
对对象的弱引用不足以使对象保持活动状态:当对引用的唯一剩余引用是弱引用时,垃圾收集可以自由销毁该引用,并将其内存用于其他用途。但是,在实际销毁对象之前,弱引用可能会返回对象,即使没有对它的强引用。
包装浮筒 value
之间 min
和 max
.
可用于创建类似循环的行为或无限曲面。
# a is 0.5
a = wrapf(10.5, 0.0, 10.0)
# a is 9.5
a = wrapf(-0.5, 0.0, 10.0)
# Infinite loop between 0.0 and 0.99
f = wrapf(f + 0.1, 0.0, 1.0)
# Infinite rotation (in radians)
angle = wrapf(angle + 0.1, 0.0, TAU)
注: 如果您只想在0.0和 n
(何处) n
是一个正的浮点值),使用 fmod 像这样的方法 fmod(number, n)
.
wrapf
比使用 fmod 通过为用户提供对最小值的简单控制来实现。它还完全支持负数,例如
# Infinite rotation (in radians)
angle = wrapf(angle + 0.1, -PI, PI)
包装整数 value
之间 min
和 max
.
可用于创建类似循环的行为或无限曲面。
# a is 0
a = wrapi(10, 0, 10)
# a is 9
a = wrapi(-1, 0, 10)
# Infinite loop between 0 and 9
frame = wrapi(frame + 1, 0, 10)
注: 如果您只想在0和之间换行 n
(何处) n
是一个正整数值),使用类似于 number % n
.
wrapi
比使用模方法更灵活,通过给用户一个对最小值的简单控制。它还完全支持负数,例如
# result is -2
var result = wrapi(-6, -5, -1)
GDScriptFunctionState yield ( Object object=null, String signal="" )
停止函数执行并将当前挂起状态返回给调用函数。
从呼叫方呼叫 GDScriptFunctionState.resume 在状态恢复执行。这将使状态无效。在恢复的功能中, yield()
返回传递给 resume()
函数调用。
如果传递了一个对象和一个信号,则在该对象发出给定信号时恢复执行。在这种情况下, yield()
返回传递给的参数 emit_signal()
如果信号只接受一个参数,或者包含传递给 emit_signal()
如果信号有多个参数。