何时以及如何避免为任何事情使用节点
节点产生成本低廉,但是它们也有一定的局限性.一个项目可能有成千上万个节点在做所有事情.他们的行为越复杂,每个节点对项目性能增加的压力就越大.
Godot为创建节点使用的API,提供了更轻量级的对象.在设计如何构建项目的特性时,请务必将这些作为选项牢记在心.
Object:终极轻量级对象,原始对象必须使用手动内存管理.尽管如此,创建自己的自定义数据结构并不难,甚至于节点结构,也比 Node 类更轻.
示例:参见 Tree 节点.它支持对,具有任意行数和列数的内容表,进行高级定制.用来生成可视化的数据实际上是 TreeItem 对象的树.
优点: 将一个人的API简化为较小范围的对象,有助于提高其可访问性,改善迭代时间.与其使用整个Node库,不如创建一组简略的Objects,节点可以从这些Objects中生成和管理相应的子节点.
注解
处理它们时要小心.可以将
Object
存储到变量中,但是这些引用可能在没有警告的情况下失效.例如,如果对象的创建者决定删除它,这将在下一次访问时,触发错误状态.Reference: 只比Object更复杂一点.它们跟踪对自己的引用,只有当对自己没有另外的引用存在时,才会删除加载的内存.在大多数需要在自定义类中获取数据的情况下,很有用.
示例 参见 File 对象.它的功能就像普通
Object
一样,只是不需要人为删除它.优势: 与
Object
相同.
Resource: 只比
Reference
稍微复杂一点.它们天然具有将其对象属性,序列化和反序列化Godot资源文件的能力(即保存和加载).示例:脚本,
PackedScene
(用于场景文件),以及其他类型,比如 AudioEffect 类.每一个都可以保存和加载,因此它们从Resource
扩展.优势:关于 Resource 与传统数据存储方法相比的优势, 已经说了 很多.然而,通过
Node
使用Resource
的上下文,它们的主要优点是在属性检查器的兼容性方面.虽然几乎和Object/Reference
一样轻量级,它们仍然可以在属性检查器中显示和导出属性.这使他们可以实现,与可用性方面的子节点非常相似的目的,而且如果计划在其场景中,拥有许多此类Resource/Node
,还可以提高性能.