返回介绍

节点操作

发布于 2024-01-08 20:55:54 字数 6470 浏览 0 评论 0 收藏 0

Godot 使用节点作为组成游戏物体的基本单位,因此操作节点就等于操作游戏中的物体。

注意哈,本节是讲操作节点,而不是操作节点上的属性

我们上一节见到了 get_parentadd_child 方法,这一节我们多认识几个操作节点的方法。

获取节点

我们之前见到过 $xxx 这种写法,其实有一个和它功能相同的方法,叫做 get_node,不过 $ 符号用起来更方便,所以基本上很少会用 get_node

$节点名 这种写法大家应该都认识,就是获取子物体中叫做 节点名 的那个节点。

节点名可能包含一些奇怪的符号,直接把名字写在 $ 后面会出现语法错误,比如有个节点叫做 外.币 巴-伯,这时就可以使用字符串来表示节点名,变成 $"外.币 巴-伯" 即可。

准确来说,$ 符号后面填写的并不是节点名,而是节点路径,例如我们可以使用两个点 .. 表示上一级,或者使用 /root/ 开头表示场景根节点,下面来看几个例子:

  • $"../ABC" 获取和当前脚本所在节点同级的 ABC 节点

  • $"../../../" 获取自己的父节点的父节点的父节点

  • $"/root/BFG" 获取场景中最外层的 BFG 节点

添加节点

添加节点其实就是 add_child 方法,调用哪个节点的 add_child 就是给那个节点添加子节点。

例如 $ABC.add_child(新节点) 就是给 ABC 节点添加子节点。

删除节点

删除节点有两个方法:freequeue_free

一般情况下我更建议使用 queue_free 来删除节点,方法名中的 queue 是队列的意思,可以理解成排队,也就是说这是让节点排队删除,而不是立刻删除。

free 则是立刻删除节点,在调用 free 时,Godot 就会立刻删除这个节点。

我们来看个例子:

# 这是举例用的错误代码
free()
print(position)

运行这段代码游戏会报错,因为执行 free 时就会立刻删除这个节点,而下面的代码要输出 position 这个位置属性,可是节点已经被删除了,哪里还有位置呢。

如果我们将 free 换成 queue_free 则可以避免这个报错,Godot 会先将调用 queue_free 的节点记录下来,等咱们的代码执行完毕后,在空闲时间时再将它们删除。

某些生命周期或信号中使用 free 会直接报错,因为 Godot 内部有一种节点锁定机制。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文