在 Godot 中应用面向对象原则
引擎提供了两种创建可重用对象的主要方式: 脚本和场景. 这两种方式在技术上都没有在引擎下定义类.
尽管如此, 使用Godot的许多最佳实践涉及到将面向对象的编程原则应用到组成你的游戏的脚本和场景中. 这就是为什么了解我们如何将它们视为类是很有用的.
本指南简要介绍了脚本和场景在引擎核心中的工作方式, 以帮助您了解它们在引擎中的工作方式.
脚本在引擎中的工作原理
引擎提供了内置的类, 如 Node . 你可以使用脚本扩展这些类来创建派生类型.
这些脚本在技术上不是类. 相反, 它们是告诉引擎在内置类中执行一系列初始化的资源.
Godot的内部类具有使用一个 ClassDB 注册一个类数据的方法. 该数据库提供对类信息的运行时访问. ClassDB
包含有关类的信息, 例如:
属性.
方法.
常量.
信号.
这个 ClassDB
是对象在执行访问属性或调用方法等操作时的检查对象. 它检查数据库的记录和对象的基本类型记录, 以确定对象是否支持该操作.
将 Script 附加到你的对象中, 可以扩展 ClassDB
中的方法, 属性和信号.
注解
即使是不使用 extends
关键字的脚本, 也会隐式地继承引擎的基础 Reference 类. 因此, 你可以从代码中实例化脚本, 而无需使用 extends
关键字. 不过由于它们扩展了 Reference
, 你不能把它们附加到一个 Node .
场景
场景的行为与类有很多相似之处, 所以把场景看成一个类是有意义的. 场景是可重用, 可实例化, 可继承的节点组. 创建场景类似于有一个脚本, 创建节点并使用 add_child()
将其添加为子节点.
我们经常将场景与使用场景节点的脚本根节点配对. 因此, 场景通常是脚本声明性代码的扩展.
场景的内容有助于定义:
脚本可使用哪些节点
它们是如何组织的
它们是如何初始化的
它们彼此之间有什么信号连接
为什么这些对场景组织很重要?因为场景的实例 是 对象. 因此, 许多适用于书写代码的面向对象原则也适用于场景: 单一职责, 封装等.
场景 总是脚本的延伸, 附着在它的根节点上 , 所以你可以把它解释为一个类的一部分.
此系列最佳实践中所解释的大部分技术都建立在这一点上.