这是一段机器翻译的文本,可能包含错误!
这些信息的来源是什么?
这其中的许多内容只是对 Godot 官方文档的转述。在下方,您可以找到一些指向官方文档的有用链接(我个人更推荐直接查阅官方文档,但如果您更喜欢使用这个 Piggy 页面,尽管放心使用!)
有用的资源:
关于图形,我必须自己制作吗?
不!你们可以在这里找到很多免费资源:
其他有用链接:
其他游戏引擎?
如果您更喜欢,可以使用其他游戏引擎。其他游戏引擎的例子包括:
还有很多其他的,如果您想尝试其他东西,请随意搜索!
What is Godot?
Godot (Pronounced Goo-do),是一个“游戏引擎”。简单来说,它是一个让你制作游戏(或者如果你愿意的话也可以开发普通程序)的程序。Godot能够实现其他大多数游戏引擎所能完成的功能,包括 2D 和 3D。
使用 Godot 制作的示例游戏:Godot Showcases
不仅独立游戏可以使用 Godot 进行创作,《索尼克色彩大作戰》(Sonic Colours) 的终极版也是用 Godo t开发的!🦔🦔🦔
如何获取 Godot?
你可以从以下途径下载 Godot:
- 官方网站:Godot 官方页面。
- 或者在 Steam 上购买:Godot on Steam。
只需下载安装(或在 Steam 中运行)即可。
設置一個專案!
當你啟動 Godot 時,你會看到這個視窗:
在這裡,你會被詢問程式設計語言,GDScript 或 C#。 GDScript 非常像 Python。
GDScript 和 Python 之間的差異(沒有顏色):
def hello():
text = "Hello world!"
print(text)
func hello():
var text = "Hello world!"
print(text)
對於 Python 中的變數,你只需要寫變數的名稱。 在 GDScript 中,你必須先寫 var。 要創建函數,你寫 func 代替 def。
场景与节点
Godot 中最重要的概念之一是“场景(Scenes)”和“节点(Nodes)”。我们可以从节点开始。一个节点是 Godot 中的一个对象,它可以代表任何东西:可以是玩家、敌人、菜单中的按钮、屏幕上的文本等任何事物。场景是一组节点的集合。
接下来我们将创建一个非常简单的示例。
第1a部分 - 设置“玩家”场景
在 Godot 窗口顶部,点击 “2D” 按钮将视图切换为 2D 视图。
在窗口的左侧,你会看到以下界面:
点击 “Other Node(其他节点)” 按钮,搜索 “CharacterBody2D”,选中它并点击 “Create”。这是一个用于控制二维玩家的节点。你可能会注意到该节点的旁边有一个警告三角形 ⚠️。这是因为缺少一些期望拥有的组件或属性。
右键单击该节点时会出现一个带有 “+ Add Child Node…(添加子节点…)” 字样的按钮。使用此选项来添加两个新节点:Sprite2D 和 CollisionShape2D。其中,Sprite2D 用于为玩家角色添加图形显示,而另一个则用于处理碰撞检测。你也可以根据方便管理的原则给它们命名。例如我将我的 CharacterBody2D 命名为 “Player”。此时场景应如下所示:
第 1b 部分 - 修复碰撞形状(CollisionShape2D)上的警告⚠️
此处的三角形警告符号表示 CollisionShape2D 实际上缺少碰撞体。你可以通过点击左侧的节点来修复这个问题,右侧会弹出一个面板。这里你会看到关于该节点的许多可修改信息。不妨随意探索一下这些选项。我们需要关注的是“Shape”属性,将其设置为例如 RectangleShape2D。这并不太重要,因为我们在此处不会使用任何碰撞功能。
第 1c 部分 - 添加 Sprite、图形
如果您点击左侧的 Sprite2D,您将看到右侧出现一个字段,其中显示“Texture”。 您可以在此处放置玩家的图像。 只需将图像拖动到该字段中即可。
添加精灵后的效果如下所示。
第 2 部分 – 添加输入并检查
在窗口顶部有一个菜单栏,包含“场景”、“项目”、“调试”、“编辑器”和“帮助”。点击“项目”,然后点击“项目设置”。这里会显示一个带有大量设置的菜单。点击“输入映射(Input Map)”。在这里可以配置键盘按键。
- 在“新增操作(Add New Action)”字段中,输入 “left”,然后按“添加”。
- 接着依次添加 “right”、”up” 和 ”down”。
- 这些被称为“动作(Actions)”。
- 在每个“动作”上,可以通过按下右侧的加号按钮来绑定按键。
- 只需在此处敲击相应的键盘按键,然后单击“添加”。
- 为所有动作用法添加对应的按键。
第 3 部分 - 添加一个脚本来控制玩家。
为了能够添加游戏逻辑,也就是对玩家、背景,或者游戏中任何其他事物做一些事情,我们需要一个脚本。脚本是代码,可以用两种语言编写,GDScript 或 C#,GDScript 是默认的。
- 点击 “CharacterBody2D” (我将其命名为 “Player”) 节点。
- 点击 “Attach Script” 按钮 (见下文)
- 在这里,您会弹出一个窗口,您可以在其中选择语言(选择 GDScript)和路径(只需让它保持默认名称,但您可以给它命名),然后继续。在这里,您会弹出一个“Script”窗口。最初这里没有什么内容。
extends CharacterBody2D
目前这段代码只是声明这段代码属于一个“CharacterBody2D”类型的节点,也就是我们的玩家。
我们将在这里添加一个函数,用于操纵玩家:
extends CharacterBody2D
func _physics_process(delta: float) -> void:
# Dette er en tom funksjon.
# 这是一个空函数。
return
Physics Process?
_physics_process 是一个在每一帧都会更新的函数,也就是说大约每秒更新 60 次(默认)。还有一个名为 _process 的函数,它会持续更新。如果你希望玩家以均匀的速度移动,请使用 _physics_process。
这里我们将添加移动玩家的代码。
第 4 部分 - 基本输入
在第 2 部分中,你添加了输入按钮,现在我们将使用它们。 存在一个名为 Input 的内置 对象,我们可以使用它来检查玩家是否按下了我们在“输入映射”中设置的按钮。
尝试将此代码放入 _physics_process 代码中:
if Input.is_action_pressed('right'):
velocity.x = 100
move_and_slide()
什么是 move_and_slide()?
move_and_slide() 是 Godot 内置函数,用于实际移动它所应用的物体。如果没有它,玩家将无法移动。
Warning
行之间的空格非常重要,这与 Python 中的情况类似。
当你按下 Godot 窗口中的播放按钮后,再按下“right”时会发生什么?
如果现在什么也没发生:
- 你记得在“Input Map”中设置了什么吗?
- 你写的是
right而不是Right吗?也就是说,你代码中写的和你输入映射中的名称是否相同?
迄今为止的全部代码
extends CharacterBody2D
func _physics_process(delta: float) -> void:
if Input.is_action_pressed('right'):
velocity.x = 100
move_and_slide()
现在尝试添加用于处理 '左'、'上' 和 '下' 的代码。
对于 '左',velocity.x 应该是什么?那 '上' 和 '下' 呢?
完整的代码如下
extends CharacterBody2D
func _physics_process(delta: float) -> void:
if Input.is_action_pressed('right'):
velocity.x = 100
if Input.is_action_pressed('left'):
velocity.x = -100
if Input.is_action_pressed('down'):
velocity.y = 100
if Input.is_action_pressed('up'):
velocity.y = -100
move_and_slide()
第 5 部分 - 修复代码
你们可能注意到,当松开方向键时,玩家不会停止。现在我们可以修复这个问题!
在所有 if 语句之前,添加一行将速度设置为 0。你可以通过编写 velocity = Vector2() 来实现。
Godot 中的所有速度和方向都是 向量,这是一个我们现在不需要深入探讨的数学概念,但如果你想了解更多关于它的含义,可以访问这里:Wikipedia vectors。
完整的代码
extends CharacterBody2D
func _physics_process(delta: float) -> void:
velocity = Vector2()
if Input.is_action_pressed('right'):
velocity.x = 100
if Input.is_action_pressed('left'):
velocity.x = -100
if Input.is_action_pressed('down'):
velocity.y = 100
if Input.is_action_pressed('up'):
velocity.y = -100
move_and_slide()
现在你启动游戏后,可以移动玩家:
接下来,你们可以对代码进行修改,使速度不仅仅是一个数值,而是存储在其他地方。
例如(在函数之前),你可以添加一个用于跟踪速度的**常量**。
最终包含 const 的完整代码
extends CharacterBody2D
const SPEED = 100
func _physics_process(delta: float) -> void:
velovity = Vector2()
if Input.is_action_pressed('right'):
velocity.x = SPEED
if Input.is_action_pressed('left'):
velocity.x = -SPEED
if Input.is_action_pressed('down'):
velocity.y = SPEED
if Input.is_action_pressed('up'):
velocity.y = -SPEED
move_and_slide()
第 6 部分 - 自由探索!
如果你回到第一部分,实用资源,你可以找到可以继续尝试的内容。
接下来,你可以试着制作你自己的游戏。你创作什么由你自己决定!如果你想创造全新的东西,那就去做吧!如果你想模仿一个已经存在的游戏,也完全可以!最好的学习方式就是实践!




