这怎么样:
var grenade = grenade_scene.instantiate() as RigidBody2D
不同于:
var grenade: RigidBody2d = grenade_scene.instantiate()
当我使用冒号 (:) 声明 RigidBody2d 时,引擎不会自动完成 RigidBody2d 内的任何函数,但当我使用“as”关键字时,它会检测到这些函数。
我预计这两行代码是相同的。
该as运算符将实例强制转换为给定类型,null如果类型不兼容则返回。
var grenade = grenade_scene.instantiate() as RigidBody2D
Run Code Online (Sandbox Code Playgroud)
这里你声明了一个没有给定类型的变量。
如果它是该类型或派生类型,或者其他类型,则可以使用grenade_scene.instantiate()强制转换的结果来初始化它。RigidBody2Dnull
你也可以这样做:
var grenade := grenade_scene.instantiate() as RigidBody2D
Run Code Online (Sandbox Code Playgroud)
这里你声明了一个类型的变量RigidBody2D。该类型是隐式的,因为 Godot 从用于初始化变量的值推断出它。
grenade_scene.instantiate()并且 - 就像以前一样 - 您将使用强制转换的结果来初始化它(RigidBody2D如果它是该类型或派生类型,或者null其他类型)。
在上述任一情况下,您可以检查null或使用is_instanc_valid来了解转换是否失败:
if not is_instance_valid(grenade):
push_error("invalid grenade scene")
Run Code Online (Sandbox Code Playgroud)
如果您知道它是正确的类型,您可能会选择忽略此类检查,但请注意,如果您更改类型,您将得到null并且不会出现错误或警告,这有时可能难以调试。
另一方面...
var grenade: RigidBody2d = grenade_scene.instantiate()
Run Code Online (Sandbox Code Playgroud)
这里你声明了一个类型变量RigidBody2d(原文如此)。这次类型是显式的。
现在,如果类型grenade_scene.instantiate()不兼容,您将收到运行时错误。
从可调试性的角度来看,这可以说更好。
遗憾的是,在撰写本文时,您无法使用此表单完全自动完成会员。这似乎是一个错误。这似乎已在即将推出的 Godot 4.3 中得到修复
| 归档时间: |
|
| 查看次数: |
1103 次 |
| 最近记录: |