外部文件
本课属于 Coddy GDScript 学习旅程的“面向对象编程”单元。第 1 课,共 65 课。
实际的程序会拆分到多个文件中。每个 .gd 文件都是一个脚本,一个脚本可以使用另一个脚本。
在脚本顶部写上 class_name,为它指定一个全局名称。这样,项目中的其他脚本就可以直接使用这个名称,无需添加 import 行:
# greeter.gd
class_name Greeter
extends RefCounted
static func greet(player_name: String) -> String:
return "Hello, " + player_name + "!"static func 会创建一个通过脚本名称调用的函数,例如 Greeter.greet("Ada")。extends RefCounted 是非节点脚本的基础类,后续课程会对此进行讲解。
# main.gd
extends Node
func _ready():
print(Greeter.greet("Ada")) # Hello, Ada!程序仍从 main.gd 中的 _ready() 开始运行。其他文件只定义了 main.gd 使用的内容。
Godot 使用 snake_case 命名文件,并使用 PascalCase 命名 class_name:class_name Greeter 位于 greeter.gd 中。每个文件只放一个类。
没有 class_name 的脚本可以通过路径使用 preload() 加载:
const Helpers = preload("res://helpers.gd")
func _ready():
print(Helpers.shout("hi")) # HI!挑战
简单在 greeter.gd 中编写静态函数 greet。它接收玩家名称并返回 Hello, NAME!。名称为空时,它会返回 Hello, friend!。
提供的代码会读取后续名称的数量,然后为每个名称打印 Greeter.greet()。对于名称 Ada 和一个空行,它会打印:
Hello, Ada!
Hello, friend!你的代码写在 greeter.gd 中。main.gd 包含提供的输入/输出代码,不能编辑。
亲手试试
extends Node
func _ready():
# 提供的输入输出代码:保持原样。
var count := int(OS.read_string_from_stdin())
for i in count:
print(Greeter.greet(OS.read_string_from_stdin()))
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: GDScript 在线编译器