教程:从零开始的ACTION GAME MAKER 第五章

第五章:增强游戏表现力并导出

本章将讲解如何“暂时完善已完成的游戏表现力,使其可在PC上运行”。

思考缺失的表现效果

虽然游戏在功能上已经基本完成,但画面略显单调。如何让游戏更具游戏感呢?

首先,由于缺少背景,这是需要补充的地方。

此外,这是一款击败敌人的游戏,但击败敌人时却没有任何表现效果。就像玩家“被击败”时有相应的表现效果一样,这里也希望能有“击败敌人”的表现效果。

另外,目前还没有声音,希望能添加背景音乐(BGM)和音效。

最后,如果能有标题画面等元素,游戏感会更强。

虽然可以列举出更多令人关注的点,但如果具备上述内容,游戏感应该会大大提升。让我们立即开始制作吧。

创建视差背景。

在 Godot 中,通过使用 Parallax2D 节点可以创建视差背景。视差背景是一种通过改变相对于摄像机的移动速度,使近处物体移动较快、远处物体移动较慢,从而产生深度感的机制。这与当前智能手机待机画面中倾斜时照片会移动的现象原理相同。

在 ACTION GAME MAKER 中,游戏场景的各个图层(Base/Wall/NearView/MiddleView/DistantView)均使用 Parallax2D 创建,从而实现视差背景效果。

请使用以下图片,加载图像并设置视差与循环:

  1. 将图片保存到 PC 上。由于系统限制,直接下载会自动压缩图片,因此请先点击图片放大后再保存。

  2. 将保存在 PC 上的 mountain.png 拖放到文件系统中。

  3. 在场景标签页中选择 stage1,并将编辑器画面切换为 2D 模式。

  4. 在场景窗口中选择 MiddleView(Parallax2D) 图层中的 Sprite2D 节点。

  5. 将 mountain.png 拖放到检查器的纹理属性中应用。

  1. 在场景窗口中选择 MiddleView(Parallax2D) 图层。

  2. 将检查器中的 ScrollScale 设置为 x=0.7, y=0.7。这样,当摄像机和玩家移动 1 个单位距离时,该背景仅移动 0.7 个单位。

  1. 接着,点击检查器中的“重复”选项以展开设置。

  2. 按以下方式设置:

Repeat Size: x=1080

Repeat Times: 10

这样,mountain.png 的宽度 1080px 将重复排列,总共重复 10 次。

  1. 进行测试运行。如果设置正确,山峦应相对于玩家缓慢移动,从而产生深度感。

如果遇到问题,请检查以下清单:

背景循环效果异常:请检查 MiddleView(Parallax2D) 的重复设置。

背景速度似乎未发生变化:请检查 MiddleView(Parallax2D) 的 Scroll Scale 设置是否正确。

为敌人添加“被击倒”状态

应该可以使用与玩家相同的方法。在“消失”状态中添加“显示被击倒粒子效果”。

如果直接添加,粒子效果显示的同时敌人也会消失,导致粒子效果也随之消失。因此,通过“插入等待”来保持显示时间。

然而,这里存在两个问题:在“自身消失”执行之前,敌人角色会继续保持移动,导致出现“虽然被击倒却仍在移动且仍有攻击判定”的状态。

关于第一个问题“移动”,是因为设置了“模板移动”动作。可以通过在“模板移动”动作中设置“停止”,或者将状态中的移动速度设置为0来使其无法移动。本次我们将尝试采用后者的设置方法。

第二个问题是需要“禁用攻击判定”。这可以通过“更改属性”动作,将“AttackCollision”的“Disabled”属性设置为有效来实现禁用。这是因为“更改属性”动作除了变量和开关外,还具有更改可在检查器中设置的项目的功能。

那么,让我们立即开始设置吧。

添加“显示粒子效果”

  1. 将场景标签切换为 enemy,将编辑器画面切换为 Script。

  2. 选择“消失”状态,点击“+添加执行动作”。

  1. 选择“显示粒子效果”动作。

  2. 在粒子对象路径中选择“被击倒粒子.tscn”并添加。

添加“等待”

  1. 继续添加执行动作,选择“插入等待”。

  2. 粒子效果的显示时间为1秒,因此等待时间设为1秒也没有问题,直接点击添加即可。

在此状态中将移动速度设为0

  1. 接下来,将移动速度设为0。请展开检查器中的“动作设置”。

  2. 找到“更改左右移动速度(%)”这一项,将其从100改为0。这样,在此状态中移动速度将变为0%。

通过“更改属性”禁用碰撞判定

  1. 取消碰撞判定。再次点击“+添加执行动作”按钮。

  2. 选择“更改属性”动作,并按如下方式进行设置:

目标对象类型:对象属性

目标类型:自身

更改目标节点名称:AttackCollision

Target Object Name:disabled

常量值:开

这样,“AttackCollision”的“disabled(禁用)”属性将被启用。

  1. 由于顺序排在“自身消失”之后,请拖动三条线图标调整顺序,使其变为:

① “显示粒子效果”

② “更改属性(碰撞判定)”

③ “更改属性(剩余敌人数量)”

④ “插入等待”

⑤ “使自身消失”

通过测试游玩确认动作

让我们通过测试游玩来确认动作。

请检查以下内容:

  • 击败敌人后是否出现特效

  • 确认在击败敌人后撞击其身体不会受到伤害

无法正常运行时的检查清单

  • 既没有特效也立即消失:请确认顺序是否正确,“自身消失”是否排在最后。
  • 撞击被击败的敌人仍会受到伤害:请确认在“更改属性”中是否正确启用了 AttackCollision 的 disabled 属性。

加入“声音”:在 ACTION GAME MAKER 中管理声音

接下来是“声音”的设置。首先,让我们思考一下需要哪些“声音”。

“BGM(背景音乐)”方面,大概需要两个:一个是关卡的 BGM,另一个是稍后制作的标题画面的 BGM。

“SE(音效)”似乎需要多个,因此请按对象分别考虑。

对于玩家,大概需要以下四种声音:“跳跃音效”、“子弹发射音效”、“受到伤害时的音效”以及“被击败时的音效”。

对于敌人,似乎需要“受到伤害时的音效”和“被击败时的音效”。

此外,在关卡通关时也需要声音,因此在“剩余敌人数量管理”中也需要“关卡通关音效”。

综上所述,我们需要 2 个 BGM 和 7 个 SE。

在 ACTION GAME MAKER 中管理声音

在 ACTION GAME MAKER 中,我们使用专用的“声音数据库”来管理声音。已注册到“声音数据库”中的 BGM/SE 可以通过视觉脚本中的动作“播放声音”进行播放。

因此,首先请将数据注册到声音数据库中。

向声音数据库注册声音

请准备以下两种 BGM 和七种 SE 的数据。这些文件已压缩为 Zip 格式,请先解压并加载到文件系统中。之后将其注册到声音数据库。此时,可以使用将指定文件夹中的音源批量导入的功能。

sounds.zip (1.4 MB)

  1. 将 sounds.zip 保存到电脑。
  2. 解压 sounds.zip(选择“全部展开”)。
  3. 将解压后的 sounds 文件夹通过拖放方式加载到文件系统中。
  4. 如果 res:// 目录下直接存在 sounds 文件夹,且其中包含 bgm 文件夹和 se 文件夹,则表示成功。如果由于解压软件的问题导致出现 res://sounds/sounds/bgm 等结构(即 sounds 文件夹内又嵌套了 sounds 文件夹),请在文件系统中拖动文件夹,使其达到下图所示的状态。

  1. 点击左上角的“数据库”按钮。
  2. 弹出“数据管理”窗口后,切换到“声音数据库”标签页。

  1. 点击窗口左上角的“批量设置”按钮。如果如下所示注册了 9 个声音数据,则表示成功。“批量设置”按钮会自动注册指定文件夹(res://sound/bgm, res://sound/se)中的音源数据。

遇到问题时的检查清单

请确认 sounds 文件夹的位置是否正确,是否直接位于 res:// 目录下,而没有嵌套在其他文件夹中。

为玩家设置音效。

现在让我们开始为玩家设置音效。首先从玩家开始。我们将为各个状态添加“跳跃音效”、“射击音效”、“受到伤害时的音效”以及“被击败时的音效”。

为“跳跃”状态添加音效。

  1. 将场景标签切换到 player,将编辑器画面切换到 Script。
  2. 选择“跳跃”状态。
  3. 在检查器中点击“+添加执行动作”。
  4. 选择“播放声音”动作。
  5. 在声音数据中选择“se_player_jump(se_player_jump.ogg)",然后点击“添加”。
  6. 尝试测试运行。如果设置正确,按下 Z 键跳跃时应该会播放音效。

为“地面射击”、“空中射击”、“移动射击”添加“播放声音”动作。

接下来添加射击音效。射击状态共有三个,我们将逐一进行设置。

  1. 选择“地面射击”状态。
  2. 在检查器中选择“+添加执行动作”。
  3. 选择执行动作“播放声音”。
  4. 在声音数据中设置“se_player_shot(se_player_shot.ogg)",然后点击“添加”。
  5. 虽然可以重复上述操作,但执行动作也可以进行复制/粘贴,因此让我们尝试使用复制/粘贴功能。
  6. 右键点击刚才添加的“播放声音”动作,选择“复制”。
  7. 选择“移动射击”状态。
  8. 将检查器中执行动作栏的大小从 1 更改为 2。此项目用于设置执行动作的数量。
  9. 会出现一个名为“<空>"的项目,右键点击它并选择“粘贴”。
  10. 如果“播放声音”动作按如下方式粘贴成功,即表示操作正确。
  11. 选择“空中射击”状态,重复步骤 7 到 10,通过复制/粘贴添加“播放声音”动作。
  12. 完成后进行测试。在待机、移动或跳跃状态下按下 X 键发射子弹,确认是否播放了相同的音效。

为“受到伤害”状态添加“播放声音”。

接下来是为“受到伤害”状态添加音效。由于“播放声音”的添加步骤相同,此处将省略详细说明。

  1. 添加“播放声音”动作,并在声音数据中选择“se_player_damage(se_player_damage.ogg)"。
  2. “受到伤害”状态中已包含等待动作,请拖动“播放声音”的三条横线图标,将其移动到等待动作之前。
  3. 进行测试运行,检查是否在碰到敌人时播放了音效。

为“被击败”状态添加“播放声音”。

  1. 选择“被击败”状态,添加“播放声音”动作,并在声音数据中选择“se_player_down(se_player_down.ogg)"。
  2. 进行测试运行,确认在角色下落或 HP 归零时是否播放了音效。如果播放成功,则玩家的音效设置已完成。

为敌人设置音效

接下来,让我们为“enemy”设置音效。虽然有两种音效:“受到伤害的声音”和“被击败时的声音”,但“enemy”并没有“受到伤害”状态。在这种情况下,我们可以使用 TakenDamageSettings(受到伤害设置)节点,现在就试试看吧。

使用 TakenDamageSettings(受到伤害设置)节点播放音效

  1. 切换到场景标签页,选择 enemy。
  2. 在场景窗口中选择 TakenDamageSettings 节点。
  3. 展开检查器中的“受到伤害数据列表”。
  4. 点击“+添加受到伤害时的设置”。
  5. 点击<空>,选择“新建 TakenDamageData”。
  6. 展开生成的“TakenDamageData”。
  7. 展开“其他设置”。
  8. 将“播放声音”设置为“开”,并在“声音数据”中设置“se_enemy_damage”。
  9. 进行测试运行。如果击中敌人时播放了音效,则说明成功。

为敌人的“消失”状态添加“播放声音”

这部分与之前相同。

  1. 选择“消失”状态,点击“+添加执行动作”。
  2. 选择“播放声音”动作,在声音数据中选择“se_enemy_down(se_enemy_down.ogg)”并添加。
  3. 调整动作顺序,将“播放声音”移动到“添加等待”之前,即可完成设置。
  4. 进行测试运行。如果击败敌人时播放了音效,则说明成功。

设置关卡背景音乐(BGM)和通关音效(SE)

关于背景音乐(BGM),首先需要预先设置“循环播放”。这可以在“导入”设置中进行调整。

接下来,关于在哪里播放 BGM,建议在始终显示的“剩余敌人管理”对象的“计数”状态中进行播放。

此外,关于关卡通关的音效(SE),似乎也可以在“剩余敌人管理”的“关卡通关”状态中进行设置。

在“导入”设置中让 BGM 循环播放

可以在“文件系统”中选择的素材,通过从“场景窗口”切换标签页显示的“导入”窗口来更改素材设置。

  1. 在“文件系统”中选择 sounds 文件夹/bgm 文件夹内的 bgm_stage1.ogg。

  1. 将左上角场景窗口的标签页切换到“导入”。

  2. 在导入窗口中将“循环”设置为“开”,并点击“重新导入(*)”按钮。

  1. 会显示正在(重新)导入资源的进度条,自动关闭后即完成。

  1. 重复步骤 2 至 4 的操作,将另一个 BGM bgm_title.ogg 的循环也启用。

在“剩余敌人管理”的“计数”状态中播放 BGM

BGM 也可以像 SE 一样通过“播放声音”动作来播放,操作方法与之前相同。

  1. 将场景标签页更改为“剩余敌人管理”。

  2. 选择“计数”状态,通过“播放声音”动作设置播放 bgm_stage1 并添加。

  1. 进行测试游玩,尝试确认是否在关卡开始时播放了 BGM。

在“剩余敌人管理”的“关卡通关”状态中播放 SE

选择“关卡通关”状态,通过“播放声音”动作设置播放“se_stageclear”。

设置完成后进行测试游玩,尝试确认是否在击败所有敌人后播放了 SE。

设置“标题画面”

现在让我们设置标题画面。

创建一个作为新游戏场景的标题画面,并在标题画面上进行操作以开始 stage1,这样的形式是合适的。

ACTION GAME MAKER 拥有专用的场景切换(SceneTransition)功能,利用该功能即可完成设置。

那么,让我们创建“标题画面”游戏场景并进行设置,通过“场景切换”将两个场景连接起来。

思考“标题画面”的功能

由于本次是简单的游戏,标题画面应设置为背景显示文字并播放 BGM 的场景,按下跳跃键(Z 键)后开始 stage1。也就是说,可以通过创建新的游戏场景,使用 Sprite2D 在 UI 场景中设置标题背景、显示标题 Logo,并放置用于播放声音的 UI 游戏对象来实现。

与视觉脚本类似,“场景切换”也可以设置为通过特定按键输入来切换场景,因此可以通过该功能设置跳跃切换。

创建“标题画面”用游戏场景

  1. 打开新的场景标签页,在“创建根节点”中选择“游戏场景”。

  1. 创建完成后保存场景。由于本次是标题画面,请将其保存为“title_scene.tscn”。

为“标题画面”用游戏场景设置背景

  1. 标题场景的背景图像请使用以下内容,请右键点击并保存到 PC。

  1. 从 PC 将 title_bg.png 通过拖放加载到文件系统中。

  2. 在场景画面中选择“UI”图层。

  3. 按住“SHIFT 键”,将文件系统中的 title_bg.png 拖放到场景画面中 UI 图层的范围内(蓝线框内)。按住 SHIFT 键拖放时,该文件将作为所选节点(本次为“UI”图层)的子节点进行配置。

  1. 请确认是否已正确作为 UI 图层的子节点进行配置。如果位置有偏差,请在场景图层中拖动 TitleBg 节点将其调整到正确位置。

  1. 该背景图像已设置为与摄像机尺寸完全一致,即宽度 1152、高度 648。因此,如果稍有偏差,背景中的灰色部分就会显露出来,请仔细调整位置使其完美对齐。请在场景窗口中选择 TitleBG 节点。

  2. 展开检查器中的“变换”项目。

  3. 将位置属性的 x 设为 576,y 设为 324。默认情况下,图像的中心是基准点,因此将其放置在摄像机尺寸(宽度 1152、高度 648)的一半数值处即可完美对齐。

创建用于“标题 Logo”的游戏对象。

  1. 打开一个新的场景标签页,在“创建根节点:”中选择游戏对象。

  2. 对象名称:title_logo,使用模板:UI,类型(类)留空,然后创建。

  1. 创建后,请右键点击未保存(*)以保存场景。名称保持为 title_logo.tscn 即可。

  2. 右键点击以下图片并保存到 PC。

  1. 将保存的 title_logo.png 通过拖放方式加载到文件系统。

  2. 将文件系统中的 title_logo.png 拖放到编辑器界面进行放置。

为“标题 Logo”游戏对象设置可视化脚本。

该对象只需播放 BGM,即只需执行“播放声音”操作即可,因此一个状态和一个操作就足够了。

  1. 选择 title_logo (GameObject) 节点,点击 :scroll:+ 按钮附加脚本。

  1. 保持默认名称进行创建。

  1. 将状态 001 重命名为“标题”,并点击“+ 添加执行操作”。

  1. 选择执行操作“播放声音”。

  2. 在声音数据中选择“bgm_title (bgm_title.ogg)",然后点击“添加”。

在游戏场景 (title_scene) 中放置 title_logo 对象

  1. 将场景标签页设置为 title_scene,将编辑器界面切换为 2D 模式。

  2. 选择 UI 图层中的 TitleBG 节点。

  3. 将文件系统中的 title_logo.tscn 通过拖放方式放置到屏幕上。至此,标题画面的准备工作已完成。如果放置后仍不可见,可能是该对象被放置在背景之后。请确认它是否如以下图片所示,作为 UI 图层的子节点,并位于 TitleBG 的下方(前方)。

从“标题画面”创建到“stage1”的场景切换

现在,让我们开始创建从标题画面到 stage1 的场景切换。

场景切换画面的操作大致与视觉脚本相同。

步骤如下:首先在“场景切换”画面中加载 title.tscn,将初始场景更改为 title.tscn,然后设置从 title.tscn 到 stage1.tscn 的切换条件。

之后,请设置切换的演出效果。

  1. 将顶部的标签从 2D 切换到 SceneTransition。

图片50

  1. 会出现类似视觉脚本的界面,请将文件系统里的 title_scene.tscn 拖拽到画面中进行加载。

  1. 将开始场景更改为标题画面。右键点击 title_scene,在菜单中选择“设置为初始场景”。

  1. 接下来添加链接。右键点击 title_scene,选择“添加链接”,并将其连接到 stage1。

  2. 展开检查器中的“切换条件”。

  3. 将“执行以下输入操作”设为开启。

  4. 在输入操作列表中,依次设置“+添加输入”、“<空>”、“新建 输入相关条件”。

  1. 展开“输入相关条件”,将输入键设为“跳跃”,输入条件设为“按下瞬间”。

  1. 接下来是演出设置,请展开“切换前演出”。

  2. 按如下方式进行设置:

画面演出:向上滑动

BGM 演出:停止

淡出:开启

播放音效:开启

音效:se_enemy_damage(se_enemy_damage.ogg)

这样,当场景切换开始时,标题画面会向上滑动,同时播放敌人受到攻击的音效,BGM 会淡出(逐渐变小)并停止。

  1. 接下来,展开“切换后演出”。

  2. 将画面演出设置为“向下滑动”,这样当标题画面向上移动时,stage1 会从上方降下出现。

完成后请尝试测试运行。

如果实现正确,启动测试运行时会出现标题画面,按下 Z 键后演出效果将运行,并切换到 stage1。

无法顺利进行时的检查清单

从 stage1 开始:请检查是否正确将初始场景设置为 title_scene,以及是否在测试运行时使用了“运行项目 (F5)"。

场景切换无法顺利进行:请再次检查从标题到 stage1 的链接条件是否正确设置。

尝试导出游戏

现在,游戏已经基本完成。目前进行的测试游玩,只是通过 ACTION GAME MAKER 执行的,因此如果不进行导出,只有拥有 ACTION GAME MAKER 的人才能游玩。

不过,通过“导出”功能,可以让任何人都能游玩。

让我们尝试导出为 Windows 电脑可用的版本。

  1. 从菜单的“项目”中选择“导出”。

  1. 导出窗口打开后,点击“添加”按钮选择 Windows Desktop。(此画面显示了 6 个导出目标,但截至 1.1.0 版本,ACTION GAME MAKER 正式支持的只有 Android、Web 和 Windows Desktop 这 3 个。)

  1. 首先,指定导出路径。这是输出目标,但默认会在项目的 res:// 目录下创建,因此为了避免与素材混淆,请创建单独的文件夹。

点击导出路径最右侧的 :page_with_curl: 图标。

  1. 会显示项目的文件夹(文件系统的文件夹),右键点击创建新文件夹。

补充说明

导出目标也可以设置为“文件系统”以外的位置。本次为了清晰起见,我们将其设置在项目内,但实际上建议导出到您自己方便处理的项目外文件夹中。

  1. 将其命名为 export 并确认。

  1. 打开创建的 export 文件夹,将文件名保存为 tutorial。(这将成为导出时的可执行文件名。)

  1. 如果导出路径如下所示,则确认无误。

图片64

  1. 接下来是各种选项设置,但请将"Export Console Wrapper"仅设置为 No。此项目用于决定是否显示调试用的控制台窗口。

  1. 点击“导出项目”按钮。

  2. 会出现保存窗口,显示之前指定的文件夹和可执行文件名,直接点击保存即可。

  1. 会出现如下所示的“打包中”进度条,请稍等片刻。

  1. 虽然会出现以下警告,但导出已成功完成。这是关于 rcedit(用于保存可执行文件图标、作者名等数据的功能)未能正常执行的警告,但由于本次并未进行相关设置,因此没有问题。

另外,输出窗口中也会显示 ERROR: Could not create child process: rcedit export/tutorial.exe --set-icon… 这样的错误,但内容与上述警告相同,因此无需担心。

测试导出的游戏

  1. 关闭导出窗口。

  2. 右键点击文件系统中的 export 文件夹,选择“在文件管理器中打开”。

  3. Windows 资源管理器将打开,export 文件夹内应包含 tutorial.exe 和 tutorial.pck 这两个文件。exe 是游戏本体,pck 是包含运行所需素材等的文件。

图片70

  1. 双击 tutorial.exe 启动游戏。

应该会弹出名为 Tutorial(DEBUG) 的窗口,即可开始游玩。

至此,您制作的这款游戏,只要有 Windows PC,任何人都可以游玩。如果想让别人体验,请将 tutorial.exe 和 tutorial.pck 一起发送给他们。

结语

你虽然制作的是一个小游戏,但已经是一位成功完成游戏的优秀游戏创作者了!

恭喜!

如果你想在这个游戏中添加二段跳、实现蹬墙跳、加入滑铲、加入蓄力射击、添加武器切换、加入Boss战……等等,仅在这个游戏中就有许多想做的事情,你可能还想尝试制作其他类型的游戏。

从现在开始,动手制作你想做的东西吧!

虽然可能会觉得有些困难,但通过本教程,你已经学习了游戏的基础知识,并从概念上深入掌握了ACTION GAME MAKER。只要发挥创意,你一定能制作出各种各样的游戏。

只要具备“将这种动作与这种条件组合起来,就能实现这样的效果”这样的创意能力,就完全没问题。

如果一时想不出主意,或遇到困难,可以在RPG Maker Guild中搜索,或前往官方Discord提问。

在RPG Maker Guild中,可以通过右上角的搜索栏输入文字进行搜索。

这是为交流而设立的官方Discord频道:

https://discord.gg/vfaV86vYd9