这是一篇机器翻译文本,可能包含错误!
这一信息来自哪里?
很多内容只是对 Godot 官方文档的重述。下方是一些有用的链接到官方文档(我更推荐使用这些,但如果您更喜欢在 Piggy 上使用这个,那就随意!)
有用的资源:
关于图形,我必须自己制作吗?
不!你们可以在这里找到很多免费资源:
其他有用的链接:
其他游戏引擎?
如果您更喜欢,可以使用其他游戏引擎。其他游戏引擎的例子包括:
还有很多其他的,如果您想尝试其他东西,请随意搜索!
什么是 Godot?
Godot (发音为 Guh-doh),是一个“游戏引擎”。 简单来说,它是一个允许你创建游戏(或常规程序,如果你愿意)的程序。 Godot 可以做其他游戏引擎可以做的绝大多数事情,包括 2D 和 3D。
游戏示例:Godot Showcase
不仅是独立游戏是在 Godot 中创建的,Sonic Colors Ultimate 也是使用 Godot 制作的!
如何获取 Godot?
你可以从以下位置下载 Godot:
- 官方网站: Godot Official Page.
- 或者在 Steam: Godot 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
。
Scenes & Nodes
一个 Godot 中最重要的概念是 Scenes 和 Nodes。我们可以从 Nodes 开始。一个 node 是 Godot 中的一个对象,它可以代表任何东西。它可以代表一个玩家,一个敌人,一个菜单中的按钮,屏幕上的文本,各种各样的东西。Scenes 是一个节点的集合。
这里我们将创建一个非常简单的例子。
第 1a 部分 - 设置“player”场景
在 Godot 窗口的顶部,点击“2D”按钮以将视图更改为 2D 视图。
在窗口的左侧,您将看到以下界面:
点击“Other Node”按钮,搜索“CharacterBody2D”,选择它并点击“Create”。 这是一种用于 2D 玩家的节点。 您可能会看到“CharacterBody2D”节点旁边有一个警告三角形 ⚠️。 这是因为缺少它希望拥有的某些内容。
如果您右键单击节点,则有一个“+ Add Child Node…”按钮。 使用此按钮添加两个节点,Sprite2D 和 CollisionShape2D。 Sprite2D 用于在玩家身上添加一些图形,而另一个用于检查碰撞。 您也可以根据需要给它们命名,以便更容易跟踪。 我将我的 CharacterBody2D 命名为“Player”。 场景现在应该如下所示:
第 1b 部分 - 修复 ⚠️ CollsionShape2D
警告三角形在此情况下表示 CollsionShape2D 缺少实际碰撞。 您可以通过点击节点(左侧),然后在 右 侧显示面板来修复此问题。 在这里,您将获得大量关于您可以更改的节点信息。 随意尝试一下。 但我们将重点关注的是“Shape”,将其设置为例如 RectangleShape2D。 这并不很重要,我们将不使用这些碰撞。
第 1c 部分 - 添加 Sprite、图形
如果您点击左侧的 Sprite2D,您将看到右侧出现一个字段,其中显示“Texture”。 您可以在此处放置玩家的图像。 只需将图像拖动到该字段中即可。
添加精灵后的效果如下所示。
第 2 部分 - 添加输入,控制
在窗口顶部有一个菜单,”场景 - 项目 - 调试 - 编辑器 - 帮助”。点击 “Project” 然后点击 “Project Settings”。在这里你会看到一个包含大量设置的菜单。点击 “Input Map”。在这里你可以设置键盘上的按键。
- 在 “Add New Action” 字段中,输入 “left” 然后点击 “Add”。
- 随后添加 “right”、”up” 和 “down”。
- 这些会被识别为 “Actions”
- 在每个 “Action” 上,你可以通过点击右侧的 + 按钮来添加按键。
- 在这里只需点击键盘,然后点击 Add。
- 为所有 actions 添加按键。
第 3 部分 - 添加一个脚本来控制玩家。
为了能够添加游戏逻辑,也就是对玩家、背景,或者游戏中任何其他事物做一些事情,我们需要一个脚本。脚本是代码,可以用两种语言编写,GDScript 或 C#,GDScript 是默认的。
- 点击 “CharacterBody2D” (我将其命名为 “Player”) 节点。
- 点击 “Attach Script” 按钮 (见下文)
- 在这里,您会弹出一个窗口,您可以在其中选择语言(选择 GDScript)和路径(只需让它保持默认名称,但您可以给它命名),然后继续。在这里,您会弹出一个“Script”窗口。最初这里没有什么内容。
extends CharacterBody2D
# Dette er en karakterfigur i et 2D-spill.
# 这是一个2D游戏中一个角色。
目前这段代码只是声明这段代码属于一个“CharacterBody2D”类型的节点,也就是我们的玩家。
我们将在这里添加一个函数,用于操纵玩家:
extends CharacterBody2D
func _physics_process(delta: float) -> void:
# Dette er en tom funksjon.
# 这是一个空函数。
return
物理过程?
_physics_process
是一个函数,它在每一个“帧”中更新,大约每秒 60 次(默认)。 还有一个名为 _process
的函数,它会全面更新。 如果你想让玩家以平稳的速度移动,就使用 _physics_process
。
这里我们将添加移动玩家的代码。
第 4 部分 - 基本输入
在第 2 部分中,你添加了输入按钮,现在我们将使用它们。 存在一个名为 Input
的内置 对象,我们可以使用它来检查玩家是否按下了我们在“输入映射”中设置的按钮。
尝试将此代码放入 _physics_process
代码中:
if Input.is_action_pressed('right'):
# Hvis høyre tasten trykkes, sett x-hastigheten til 100
# 如果按下右键,将x速度设置为100
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()
現在嘗試添加 `'left'`, `'up'`, `'down'` 的代碼。
`velocity.x` 對於 `left` 必須是什麼? 對於 `up` 和 `down` 呢?
完整的代码如下
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:
velovity = 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 部分 - 自行探索!
如果您回顧第一部分,有用的資源,您可以找到可以繼續探索的內容。
接下來,您可以嘗試創建您自己的遊戲。您製作的是什麼取決於您!如果您想創建一些全新的東西,那就去做吧!如果您想嘗試模仿現有的遊戲,那就去做吧!學習的最佳方法就是嘗試!