Menu
CoddyTech

外部文件

本课属于 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!
challenge icon

挑战

简单

在 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()))
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: GDScript 在线编译器