随便给段脚本看看
extends Node2D
func _ready():
# 新建一个 Sprite 节点
var sprite = Sprite.new()
# 设置纹理图片
var icon = preload("res://icon.png")
# 添加到当前场景中
add_child(sprite)
func _process(delta):
var sprite = $mynode
sprite.rotate(0.1)
由于 Godot 场景树中同一层级节点都不准重名,所以给定义节点名字,这可以快速定位到节点是谁,所以Godot 中用 $+节点名字
这个语法糖来快速定位节点,这样就能通过脚本来快速操作节点了
用 $ 获取节点
除了刚刚的语法糖,$
还有其他用法:
比如获取当前节点对象
var curr1 = $"."
var curr2 = self
但是不可以去掉引号,否则会报错:
Parser Error: Path expected after $.
也可以按照在 $
后添加路径字符串,绝对路径相对路径都可以
var x = $"Sword"
var y = $"Backpack/Dagger"
var z = $"../Swamp/Alligator"
var b = $"/root/MyGame"
以上路径摘自 Godot 官方文档
一般来说,只要 $
后面路径字符串的第一个字符不是 .
和 /
一般都可以把路径字符串的引号去掉,所以以上路径可以替换为:
var x = $Sword
var y = $Backpack/Dagger
var z = $"../Swamp/Alligator" # 不可以替换
var b = $"/root/MyGame" # 不可以替换
函数方法
可以使用 get_parent, get_node 和 get_tree 来分别获取父节点,指定节点和当前场景树来任意获取节点
比如获取父节点:
var par1 = $".."
var par2 = get_parent()
当前路径的子节点:
var chi1 = $son
var chi2 = $"son"
var chi3 = get_node("son")
一些关于内存管理的记录
Godot 中有两种资源,一种是继承自 Reference 类,另一种是继承自其他 Node 的,前者通过引用计数算法释放,或者通过 unreference
手动释放,后者需要 free
或者 deque_free
释放
Godot GDScript 没有垃圾回收机制,可能存在一定的内存泄露问题,但是由于其没有 C++ 指针,所以风险较 C++ 而言来说较小
不过即使存在内存忘记释放的问题,也可通过 Godot 编译器中的 监视器和性能分析器来快速排查,因为 GDScript 是脚本语言,所以单步调试方便
GDScript 中继承自 Reference 类的类(对象) 都通过引用计数算法来进行对象的释放