教程:用 Maker 模式做一个跳跃动作游戏吧!

前言

本教程将带你从零开始制作一个极其简单的跳跃动作游戏,借此学习在 ACTION GAME MAKER 中制作游戏的基础。

本文假设你已经完成了启动 ACTION GAME MAKER 时显示的「画面操作导览」。如果还没做过,或者已经跳过了,请先通过启动器的「教程」按钮体验一下「画面操作导览」。

这次要制作的游戏很简单:用跳跃踩踏敌人将其击倒,打倒 5 个敌人即算通关。

那么我们马上开始吧。

Part1:做好制作前的准备!

Part1-1:调整编辑器!

首先,把编辑器调整成你喜欢的样子。

  1. 启动 ACTION GAME MAKER。
  2. 启动器打开后,点击右上角的「设置」按钮。

  1. 设置窗口打开后,设置字体大小和显示缩放(UI 的大小)。显示缩放选择 Auto 时,会自动配合画面尺寸调整到合适的大小。设置好后按「下一步」。
  2. 接着可以设置主题颜色。喜欢深色主题的话,可以从 默认/深色/午夜 中选择;喜欢浅色主题的话,可以从 浅色/奶油/薄荷 中选择。选好喜欢的颜色后按「完成」,准备就完成了。

Part1-2:新建一个项目吧!

接下来准备一个新项目。

  1. 点击启动器画面左上角的「+新建」按钮。

  2. 出现「新建项目」窗口后,修改项目名称。(这里命名为「跳跃动作教程」,你也可以用自己喜欢的名字。)这次要做的是跳跃动作游戏,素材使用官方素材,所以其他设置保持原样即可。点击「创建」按钮。

  3. 经过短暂的加载画面后,编辑器成功启动就说明没问题了。这样项目就创建好了。

Part2:来做地图吧!

Part2-1:首先读取图块!

启动后显示的画面就是地图视图,我们就直接在这里把地图做出来吧。如果你什么都没点过,「地图图层」中应该选中了「基础」,下方则显示着一个叫做调色板的东西。

这个「基础」是一个名为 TileMapLayer 的节点,用来绘制图块;调色板则是显示可供绘制的图块的区域。不过现在还没有注册任何图块,我们来添加吧。

  1. 点击下部面板的瓦片设置按钮。

  1. 「瓦片调色板设置」窗口会打开。这里用来设置图块的图像等,但现在还没有图像,请点击右上角的「导入官方素材」按钮。

  1. 素材列表会显示出来,并且图块部分应该已经展开了。点击「自动图块(基础)」左边的 > 将其展开。

  1. 列表展开后会显示各种各样的图像,点击 AT_B_001_soil_00.png 左边的方框打上 ✓,然后按「导入」按钮。

  2. 接着会弹出「是否将读取的素材注册为图块?」的窗口,点击「OK」。

  3. 这张图像是自动图块用的图像,各种设置都会自动完成,所以直接按「导入」按钮就好。!

    [details=“如果不小心点了取消……”]
    可以通过「瓦片设置」窗口的「从图像一览添加」重新进行图块添加。

[/details]

  1. 这样自动图块就注册好了,关闭「瓦片设置」。

  1. 关闭后的调色板里应该也已经添加了自动图块。

Part2-2:来绘制图块吧!

我们马上开始绘制。调色板中应该已经选中了「画笔」工具,图块的图像也已选中,所以直接在上方的画面里绘制即可。

  1. 把鼠标光标移动到上方画面,会显示出格子状的区域。点击后,该位置就会放置一个图块。

  2. 拖动的话,就能像用笔一样连续绘制图块。由于这是自动图块,形状会随着绘制方式自动变化。画错的话,也可以用右键擦除。

  3. 紫色的方框是摄像机的范围,请在其中做出一个有一定大小的小岛。

如果画不上去……

请检查「地图图层」中是否正确选中了「基础」,调色板的工具中是否正确选中了「画笔」,以及是否误开启了「橡皮擦」。
image

另外,请确认上方预览画面的工具栏是否正确处于 :up_left_arrow:(选择模式)。在移动模式、旋转模式或平移模式下是无法绘制的。

  1. 画完之后,请按右上角的 :play_button: 按钮(运行项目)。测试游玩会启动,你制作的小岛应该会显示出来。

如果没能正常显示……

请确认小岛是否确实画在了紫色方框(摄像机的范围)之内。

这样地图就做好了,接下来我们来制作玩家。

Part3:来做对象吧!

Part3-1:用「素材管理」准备官方素材!

Part3 要准备玩家用的对象,但我们首先还没有图像。

让我们用「素材管理」把官方素材导入到游戏里。

  1. 在上方的视图切换栏中,切换到素材管理视图。

image

  1. 点击「导入官方素材」。

  1. 展开「侧视图模板图像」,选择 player_meika.png 并「导入」。这是为侧视角动作游戏的玩家准备的模板图像。

  1. 保险起见,我们确认一下是否正确读取了。把「文件夹」切换成「图像」,应该能看到 player_meika.png。如果没有,就重新导入一次。

Part3-2:来做玩家对象吧!

接下来我们实际制作玩家。

  1. 切换到「对象」视图。

  2. 点击左侧停靠面板中的「+新建」按钮。

  3. 会打开「创建游戏对象」窗口,把对象名称设为「玩家」。其他保持默认设置即可,如果有不一样的地方,请按照下图设置后点击「创建」。

  1. 会弹出「是否自动设置默认的移动输入?」的窗口,请点击「是」。这样就会自动设置用手柄或键盘操作所需的按键。

如果不小心点了「否」……

在玩家的节点列表的必需要素中选择「移动与跳跃」。

确认右侧的检查器停靠面板,在输入按键的设置中,把向左移动设为 left、向右移动设为 right。

  1. 这样玩家对象就创建好了。

Part3-3:为玩家设置动画

接着,我们用刚才导入的图像来制作动画。

  1. 把预览上方的标签页切换到「精灵动画」。

  2. 画面中央会出现按钮,点击下面的「从模板加载」按钮,然后选择「用于侧视图」。

[details="如果不小心点了「使用精灵动画」……"]
画面右上角也有「从模板加载」按钮,请改用那个。

[/details]
  1. 会打开「从侧视图模板加载」窗口。这个窗口用于把按特定格式制作的图像一次性读入并转成动画。

  1. 我们马上来导入图像,点击右上角的「从图像一览…」按钮。

  1. 项目内的图像会以一览形式显示出来,选择刚才导入的 player_meika,然后点击「确定」。

  1. 图像被读取了。右侧显示的是将要读入的动画预览,1. 待机~6. 射击会自动读入。左侧看到的是墙壁判定(浅蓝色方框)、受击判定(蓝色方框)、攻击判定(红色方框),但它们和图像并不匹配,这里需要手动调整。

    射击之后多出来的格子是什么?

    这个模板是拥有 19 种动画的跑酷动作用模板。切换模板栏就可以自动读取并设置这 19 种动画,但本教程用不到,所以我们使用只用其中 6 种的最小模板。

  2. 调整墙壁判定(浅蓝色方框)。墙壁判定是用来检测与图块或其他对象碰撞的区域。
    拖动浅蓝色方框四角的□,使其贴合角色。大致对上就可以,但要注意脚下部分一定要对齐,否则角色会浮在地面上或陷进地里。

  1. 调整受击判定(深蓝色方框)。受击判定是会被敌人攻击判定命中的范围,请把它设置得比墙壁判定稍大一圈。

  1. 最后调整攻击判定。这次做的是跳跃动作游戏,所以让攻击判定只出现在脚下。
    这里有一个重要的要点:在跳跃动作游戏中,通常跳跃中和下落中可以攻击,而其他动作时不能攻击……所以请取消「启用」的✓,让它变成攻击判定(禁用)。

  1. 设置完成后点击导入按钮就完成了,6 种动画集已自动创建。

  1. 试着选择任意一个动画并点击 :play_button: 播放/停止按钮,动画就会播放。

Part3-4:让攻击只在跳跃/下落中有效

由于刚才导入时禁用了攻击判定,现在这样是无法攻击的,我们用「判定动画」来调整。

如果导入时忘了禁用,或者判定的位置弄错了……
  1. 先回到预览标签页。

  1. 这里有「墙壁判定」「受击判定」「攻击判定」,选择你想修改的那个。

  1. 可以像导入时一样调整判定。(禁用的选项在右侧的检查器中。)

  2. 这只是预览而已,还需要反映到判定动画上。切换到「判定动画」标签页。
    image

  3. 在动画集中选择动画。

  4. 点击右上角的「初始关键帧同步」按钮,预览中的编辑内容就会被反映进来。请对每个动画都做一次。

  1. 选择「判定动画」标签页进行切换。

image

  1. 动画的外观发生了变化,判定也显示出来了。在这个画面中,可以针对下方显示的每一「帧」,修改各个判定的位置和大小。

  2. 在动画集栏中选择「jump」。如果刚才导入时设置正确,脚下的攻击判定应该不是红色,而是透明的(禁用状态)。

  1. 在「要素(部分已隐藏)」栏中选择攻击判定。

  1. 在下方的 jump(3 帧)栏中,确认已选中第 1 帧。我们要修改的是跳跃开始时的判定内容。

  1. 在右侧的检查器停靠面板中,取消「禁用」属性的勾选。

  2. 这样一来,跳跃时脚下的攻击判定就变成红色、处于启用状态了。点击左上角的 :play_button: 可以把判定的动作和动画一起预览。

  1. 接着,在动画集中选择「air」。air 是下落状态使用的动画,所以这边也需要启用攻击。重复步骤 4~7,把第 1 帧的攻击判定启用。

  1. 这样就实现了只有在跳跃中和下落中,攻击判定才会生效。

  1. 最后保存数据。把标签页切回预览,点击「保存」按钮。(也可以用 Ctrl+S 快捷键保存)

  1. 当左侧对象停靠面板的玩家图像上出现缩略图时,就表示保存完成了。

Part3 完成了对象的准备,接下来我们要用可视化脚本来编写程序。

Part4:用可视化脚本来编写玩家的程序吧!

Part4-1:把玩家放到地图上!

接下来我们要制作可视化脚本,不过在那之前,先把玩家放到地图上吧。

  1. 切换到「地图」视图。

  1. 把左侧停靠面板上方的标签页切换到「对象(彩色立方体图标)」。

  1. 这里应该有刚才创建的「玩家」,把它拖放到预览画面中紫色方框内(摄像机范围内)。

  1. 会弹出「确认放置图层」窗口,把它移动到基础图层。

  1. 如果基础图层下面有「玩家」,并且角色图像出现在紫色方框内,就说明没问题了。如果位置偏了,用拖放调整一下。

  2. 试着点击右上角的测试游玩按钮,应该能看到图块和角色的图像。不过由于还没有程序,角色完全不会动,我们接下来就来做吧。

Part4-2:来做玩家的可视化脚本吧!

  1. 回到「对象」视图,点击右上角的「编辑可视化脚本」按钮。

  1. 会提示「该对象没有可视化脚本」,点击「创建可视化脚本」按钮。

  1. 画面会切换到可视化脚本。方形的框叫做「状态」,分别表示玩家当前是在走路、还是在跳跃等等。通过用叫做「连接」的东西把这些「状态」连起来,可视化脚本就逐渐成形了。

  1. 我们把「状态001」做成「待机」用的状态。首先修改名称。在右侧的检查器中,把状态设置里的标题改成「待机」。

  1. 接着分配待机用的动画。把检查器向上滚动,在「要分配的动画」的动画类别中选择「idle」。

  2. 用「运行项目」来测试游玩看看,角色可以动了,向左走时还会自动翻转。不过因为只有待机动作,看起来像是滑行。接下来我们来做走路状态。

Part4-3:做一个「移动」状态并连接起来!

  1. 关闭测试游玩,在可视化脚本的「待机」状态附近右键点击,选择「添加状态」。

  2. 会生成另一个「状态001」,同样把标题改成「移动」,并把动画设置为 move。

  3. 这样「移动」状态就做好了,但还必须设置「从『待机』发生什么之后才会变成『移动』」这个条件。我们用「连接」来设置。

  4. 右键点击「待机」,选择「添加连接」。

  5. 会从「待机」拉出一条线,把线的末端对准「移动」并点击。

  6. 连接做好了,接下来设置条件。「只要有左右输入就进入移动」……这样的设置应该不错。

  7. 勾选「有输入」后,会出现输入列表,点击「+添加输入」按钮。

  8. 会打开「输入条件设置」窗口,在左列选择「任意四方向输入键」,在右列把左方向输入键设为「left」、右方向输入键设为「Right」,然后点击「添加」按钮。

  9. 这样就设置成了「在四方向键的 left 或 right 被按住期间」从待机切换到移动。接下来做反方向的连接,也就是从移动到待机。

  10. 右键点击移动,选择「添加连接」,把连接拉向待机。

  11. 从移动切换回待机是在移动输入中断的时候……所以在检查器中打开「无输入」。这样一来,没有输入时就会从移动切换到待机。

  1. 用右上角的 :play_button: 或 F5 键测试游玩看看,输入左右方向角色应该会移动,松开则会停下。

Part4-4:来做「跳跃」和「下落」状态吧!

接下来要做的是跳跃动作游戏的精髓——跳跃和下落。

大致流程是这样的:从待机或移动状态开始,如果有跳跃用的按键输入就进入跳跃;跳跃到达顶点后翻转为下落;着地后回到待机。

  1. 在任意位置右键点击,选择「添加状态」,把名称设为「跳跃」,并在动画类别中分配「jump」。

  2. 跳跃的动作可以在「状态设置」中实现,把状态设置中的「执行跳跃动作」打开。这样就能跳跃了。

  3. 右键点击「待机」创建连接,接到「跳跃」。

  4. 再次打开「有输入」,点击「+添加输入」。

  5. 在左列选择「用于输入的操作键」,把输入键设为「A」,输入条件设为「刚按下瞬间」,然后「添加」。这样一来,只有在按下 A 的瞬间才会跳跃。

  6. 我们也希望移动中能够跳跃,所以再做一个从移动到跳跃的连接。这次条件相同,所以用复制来做。右键点击刚才添加的「待机」→「跳跃」连接,选择「复制」(也可以用 Ctrl+C 快捷键复制)。

  7. 选中移动并右键点击,选择「粘贴连接」(或 Ctrl+V)。会出现和添加连接时一样的线,把它接到跳跃。

  8. 这样在移动中按下 A 的瞬间也会进入跳跃了。

  9. 接下来做下落状态。在跳跃旁边新建一个状态,名称设为「下落」,动画类别选择「air」。这个状态只是单纯下落,所以不需要状态设置。

  10. 把「跳跃」连接到「下落」。这次的条件不是输入,而是「跳跃到达顶点时」。这类条件要使用「条件设置」,请点击「+添加条件」按钮。

  11. 这里排列着许多条件,请在左列的「对象控制」中选择「达到跳跃顶点」,然后点击「添加」。(右列这次不用动)

  12. 这样一来,与输入无关,只要跳跃到达顶点就会从「跳跃」转到「下落」。

  13. 最后做从下落到待机的转换。把下落连接到待机。这次同样是「着地时」,不是输入条件,所以要使用其他条件。点击「+添加条件」。

  14. 所谓着地,可以换句话说成「向下方向与图块或敌人等发生碰撞时」,所以左列请选择「对象控制」中的「接触碰撞体」。
    右列则在「从该对象视角的接触方向」中选择「下」。这样一来,只要在「下方向」与某物碰撞,就会转到待机。

  15. 我们来测试游玩吧。如果设置正确,键盘按 Z、手柄按 A(任天堂布局为 B)就会跳跃,着地后会回到待机。

    不顺利时的检查清单

    ・根本不会跳跃。

    请检查跳跃状态的「执行跳跃动作」是否已勾选。

    ・会跳跃,但保持跳跃动作不动了。

    请检查跳跃→下落的连接是否正确设为「达到跳跃顶点」。

    ・无法着地。

    请检查下落→待机的连接是否正确设为「接触碰撞体」和「下」方向。

第5部分:制作敌人!

好的,虽然我们在动画中已经让角色具备了攻击敌人的能力,但现在还没有敌人。让我们创建一个并尝试攻击它。

第5部分-1:从模板加载敌人

从零开始制作会很麻烦,所以这次我们使用模板来简化操作。

  1. 在左侧的对象列表中点击「+新建对象」。
  2. 在对象名称中输入「敌人」,将对象组设置为 Enemy,碰撞角色设置为标准敌人,选择“行走敌人(侧视图)”,然后点击「创建」按钮。
  3. 加载出一个类似螃蟹的敌人。正如模板说明中所述,这是一个简单的敌人对象,它会左右移动,当 HP 归零时消失。请点击顶部的保存按钮或使用 Ctrl+S 快捷键进行保存。

第5部分-2:调整敌人模板!

即使保持原样,敌人也能正常运行,但在玩家跳跃踩踏时,玩家也会受到伤害。这是因为敌人消失前有一段时间,玩家可能会进入敌人的攻击范围。
因此,需要调整逻辑,使玩家在踩踏敌人时被弹起,从而避免受到伤害。

  1. 首先,攻击判定范围过大,需要调整。在左侧列表中选择攻击判定(AttackCollision),将红色预览画面中的红色攻击判定范围向下缩小至大约一半。这样应该就能避免在踩踏攻击的同时对玩家造成伤害。

  2. 接下来,制作弹起效果。点击可视化脚本的编辑按钮。

  3. 这里有 Walk 和 Dead 状态,请在附近新建一个「添加状态」。

  4. 将标题命名为“伤害”。由于没有要分配的动画,请勾选「保持转换前的动画」。这样转换前的动画将继续播放。

  5. 制作弹起玩家的处理逻辑,点击「+添加执行动作」。

  6. 选择「对象操作 > 设置对象速度」,
    设置「Y速度操作」
    「速度」设为 y:-300
    「移动对象类型」设为「最后接触的对象」。
    这样,最后接触攻击判定或墙壁判定的对象将以每秒 300 像素的速度向上弹起。

  7. 连接连线。右键点击 Walk 状态,选择「添加链接」,连接到伤害状态。

  8. 点击「+添加其他条件」。

  9. 选择「对象操作 > 接触对象攻击判定」,
    接触方向:上
    类型:对象组
    目标对象组:玩家。
    这样,当从上方被踩踏时,就会转移到伤害状态。

  10. 最后,重新粘贴 Walk→Dead 的链接。选中后右键点击,选择「剪切」。(也可以使用 Ctrl+X 快捷键。)

  11. 链接被剪切后,选择「伤害」状态并右键点击,点击「粘贴链接」。

  12. 会出现类似创建链接时的线条,将伤害状态连接到 Dead 状态。这样,当「HP 变为 0」时,就会从伤害状态转移到 Dead 状态。

第5部分-3:在关卡中放置敌人!

在关卡中放置敌人。

  1. 切换到「地图」视图。

  2. 将左侧场景列表窗格的选项卡切换为「对象(蓝色和橙色立方体图标)」。

  3. 将「敌人」拖放到关卡中的任意位置。此时,请将层级放置在「基础层级」。

  4. 只要像图片所示,敌人在基础层级下方即可。

第5部分-4:启用调试显示并进行测试游玩!

您可以直接进行测试游玩,但为了检查设置是否正确,请在启用碰撞调试显示后再进行测试。

  1. 从左上角的菜单打开调试菜单,并勾选「显示碰撞形状」复选框。

  2. 点击右上角的「:play_button:」或按 F5 键。开始测试游玩后,就像下图所示,墙壁判定、攻击判定、碰撞判定等可视化后开始测试游玩。

  3. 如果设置正确,当玩家跳跃踩踏敌人时,玩家会被轻微弹起,而敌人则会倒下。

如果无法正常工作时的检查项

・即使踩踏也无法弹起

首先,检查玩家在跳跃时脚下是否显示红色的攻击框。如果没有显示,请检查第3部分-4:仅在跳跃/下落时启用攻击。 チュートリアル: ツクールモードでジャンプアクションをツクろう! - Moonling の #2

如果显示了但无法弹起,说明可视化脚本设置不正确。请重新检查 Walk→伤害 的链接设置是否正确,以及伤害状态内部的内容设置是否正确。

・踩踏后被弹起,但敌人没有倒下

请检查 Damage→Dead 的链接设置是否正确。正确的设置应该是包含「HP 变为 0」的条件。

第6部分:扩展关卡吧!

好了,现在我们已经有了玩家和敌人,但当前这一屏的关卡显得太狭窄了。
让我们来扩展关卡吧。

第6-1部分:让相机跟随玩家!

首先,通过让相机跟随玩家,我们可以让角色在更广阔的范围内移动。

  1. 返回对象视图,在对象列表中双击玩家以打开它,
    然后选择预览。
  2. 点击“+ 添加设置”按钮。这是用于向对象添加具有功能的节点。
  3. 会弹出“添加设置”窗口,请在“目标”和“方向”中选择“相机目标”并添加。正如说明所述,此节点用于设置相机的跟随目标。
  4. 相机目标节点将自动被选中并添加。在右侧检查器窗口的“目标ID”中输入“Player”。注意:P是大写
  5. 对象设置已完成,现在进行地图侧的设置。切换到地图视图,选择地图图层中的“初始相机”节点。
  6. 选择后,请查看右侧的检查器。你应该能在“目标ID”中看到“Player”。如果没有,请将其更改为“Player”。这样,相机就会跟随拥有目标ID为“Player”的“相机目标”节点的对象。
  7. 点击右上角的[:play_button:]或使用F5快捷键进行测试游玩。相机的中心应该位于玩家身上。
如果不顺利的话

请检查玩家是否有相机目标节点,并且目标ID是否正确标记为“Player”。
请检查初始相机节点的目标ID是否为“Player”。

  1. 由于跳跃动作时玩家位于正中央,可视范围较窄,因此需要调整。查看“初始相机”节点的检查器。找到“偏移”项,输入 y:-20。这样,相机中心将位于目标上方20像素处。
  2. 再次点击右上角的[:play_button:]或使用F5快捷键进行测试游玩。相机应该稍微高于玩家,视野变得更好了。

第6-2部分:扩大关卡!

让我们通过绘制瓦片来扩大地图。

  1. 选择基础图层。

  2. 直接在预览画面中绘制瓦片。创建平台或新的浮岛等。

  3. 放置完成后进行测试游玩,检查跳跃是否能到达各个平台。如果从平台上掉落,按[F5]键可以重新开始。此外,可以通过右键拖动来删除瓦片。

  4. 添加敌人。将地图列表窗格的标签切换为“对象”。

  5. 本游戏的通关条件是击败5个敌人,已经放置了1个,所以让我们再添加4个敌人。将对象列表窗格中的敌人拖放到地图上。如果在基础图层下方放置了5个敌人,就完成了。

  6. 为了保险起见,请进行测试游玩以检查是否正常运行。

  7. 如果关卡扩大后,想要调整操作角色的移动速度,
    请从“对象”视图双击玩家,
    选择“移动和跳跃”。

在屏幕右侧
image
排列着移动和跳跃的设置项目,向下滚动


调整[左右移动量]或[跳跃初速]等。

第6-3部分:设置背景!

灰色的背景显得单调,让我们添加背景吧。

  1. 首先导入图像,移动到“素材管理”视图,点击“导入官方素材”按钮。
  2. 有一个名为“背景”的集合,勾选它并导入。
  3. 加载后,返回“地图”视图,将左上角的地图列表窗格切换为“图像”。应该会看到增加了 B_001_plain_01,02,03 等图像,这就是刚才导入的背景用图像。
  4. 在地图图层中,选择“远景”图层下的“Sprite2D”。Sprite2D 是用于显示图像的节点,但目前没有显示任何内容。检查检查器,发现“纹理”一项为空。纹理是指用于显示的图像,这里表示未指定图像。请指定图像。点击纹理<空>右侧的文件夹图标(快速加载)。
  5. 会弹出选择纹理图像的窗口,进行设置。这次是用于远景的图像,请选择名为 B_001_plain… 的蓝天图像。
  6. 纹理项变成了蓝天图像,预览画面中出现了蓝天。
如果选错了图像

按下纹理项中出现的旋转箭头按钮,可以将纹理重置为<空>。


此外,还可以使用 Ctrl+Z 快捷键返回上一个状态。

  1. 接下来,设置中景。选择中景下的 Sprite2D,在检查器的纹理项中快速加载。中景是稍微远处的图像,所以选择远处的山图像。虽然名称中间被截断看起来很复杂,请选择名为 B_001_plain… 的山图像。

    注意:可以通过右下角的按钮在列表显示和网格显示之间切换以进行确认。


8. 最后设置近景。使用相同的步骤,近景是近处的图像,所以选择草原。请选择名为 B_001_plain… 的草原图像。

9. 好了,图像已设置,但草原的位置太高,遮挡了山地和蓝天。让我们通过偏移来移动图像进行调整。

10. 查看近景 Sprite2D 的检查器,找到“偏移”项并展开,将偏移设置为 y=360,这样草原就向下移动了。

11. 虽然能看到山地,但蓝天的云被遮挡了,让我们抬高蓝天的位置。将远景 Sprite2D 的偏移设置为 y=-360。

12. 看起来不错,让我们测试游玩……但是……背景出现了断裂,露出了灰色。接下来,让背景循环播放。

为什么编辑器上重叠得很完美,但实际运行时会错位?

在动作游戏制作工具的地图中,默认情况下背景节点具有“视差背景(Parallax)”功能。这是通过根据相机的移动改变背景的移动速度来显示立体背景的功能。
如果移动或跳跃,你会发现前景层(近景)移动得快,背景层(远景)移动得慢,从而产生立体移动的效果。
为了实现这种视差,背景会根据相机的位置自动偏移显示。

  1. 这次,不选择 Sprite2D,而是选择“远景”图层本身。

  2. 查看检查器,找到“重复”项并展开,可以看到“重复大小”和“重复次数”,分别设置为 x=720,次数5次。这样,宽度为720(=设置的 B_001_plain… 图像的宽度大小)将始终展开相同的5张图像。

关于重复次数

重复次数仅表示一次在游戏内部显示的次数,因此无论设置多少次,图像都会无限循环显示。

  1. 对“中景”图层和“近景”图层也进行相同的操作,设置“重复大小”和“重复次数”为 x=720,次数5次。这样背景就不会有间隙地显示了。

  2. 通过点击每个已注册的 Sprite2D 的缩略图,


    可以显示图像的大小。
    在确认自制素材等的大小时可以使用。

Part7:来做「失败」吧!

到这里已经很有游戏的样子了,但还没有通关,也没有失败,作为游戏还不够完整,我们来把它收尾。

Part7-1:做出受到伤害时的「失败」!

让玩家碰到敌人或从关卡掉落时自动重新开始游戏。先从碰到敌人开始。

  1. 移动到「对象」视图,点击玩家的「编辑可视化脚本」按钮。

  2. 玩家的 HP 初始值设定为 1,所以转到「失败」的条件可以使用「HP 降为零」。不过,转到「失败」这件事,在移动、跳跃、待机、下落——任何状态下都有可能发生。这种时候就可以使用「AnyState」。正如「Any(所有)State(状态)」这个名字所示,只要从这里拉出连接,那么无论处在哪个状态,只要满足条件就会发生转换。

  3. 在「AnyState」旁边添加一个新状态,命名为「失败」,然后点击「+添加可执行动作」。

  4. 选择「游戏设置」中的「重置游戏」并添加。

  5. 接着右键点击「AnyState」,添加连接,接到失败状态。

  6. 点击「+添加条件」按钮,添加「变量」中的「HP 降为零」。

  7. 这样一来,无论处在哪个状态,只要「HP 降为零」就会转到失败并重置游戏。用「:play_button:」或 F5 键测试游玩,试着撞向敌人吧。

如果不顺利

・不会重置。
请再检查一次 AnyState 到失败的连接,以及失败状态的可执行动作有没有问题。
・踩踏敌人时也会被重置。
可能是敌人的攻击范围太大了,请参考 Part5-2 进行调整。
チュートリアル: ツクールモードでジャンプアクションをツクろう! - Moonling の #4

Part7-2:来做掉落导致的「失败」吧!

这个稍微复杂一些,可以通过「限制摄像机的移动范围」,并在玩家「超出摄像机范围时」转到「失败」来实现。我们先设置摄像机。

  1. 回到「地图」视图,在地图图层中选择「初始摄像机」。

  2. 在检查器中展开「限制」,把「底」的值改为 300。这时预览画面上应该会出现一条黄绿色的横线,这就是摄像机可以移动的范围。如果你做的落脚点位于黄绿色线的下方,请把「底」的值调大为 500、1000 来调整。

  3. 用 [:play_button:] 或 F5 测试游玩看看。摄像机在左右和上方依然会像之前一样追随,但掉落时应该就不再追随了。

  4. 确认之后再次回到「对象」视图,点击玩家的「编辑可视化脚本」按钮。

  5. 点击「AnyState」→「失败」的连接。

  6. 转换条件可以设置多个。我们把它设为:原本设置的「HP 降为零」,**或者「超出摄像机范围」**时发生转换。点击「+添加条件」。

  7. 选择「其他」中的「超出摄像机范围」,把「目标对象类型」设为「自己」、「之前条件的逻辑关系」设为 OR,然后添加。

  8. 这样一来,「自身 HP 降为零」OR「自身超出摄像机范围」时,就会进入失败状态并重置游戏。测试游玩,试着从落脚点掉下去。如果设置正确,掉落后应该会重置。

点击 [OR] 图标可以切换为 [AND]。
image

如果不顺利

掉落后摄像机一直追随:请重新检查地图初始摄像机的「底」限制值是否设置正确。
掉落不会重置,碰到敌人也不再重置了:请检查逻辑关系是否正确设为「OR(或者)」。如果是「AND(并且)」,就会变成只有在 HP 为 0 的状态下掉落时才会重置。

Part8:来做「通关」吧!

开头我们设定的通关条件是打倒 5 个敌人,那要怎么实现呢?这就要用到所谓的「变量」。
创建一个叫「敌人数量」的变量,初始值设为 0;之后每当有敌人被打倒,就把这个值加 1。打倒 5 个后值应该会变成 5,所以只要设置成「变量『敌人数量』变为『5』时通关」就可以了。

Part8-1:来做项目变量「敌人数量」吧!

  1. 点击可视化脚本画面上方的「设置变量・开关」按钮。

  2. 会打开一个新窗口,把标签页切换到「项目变量」。变量分为两种:各个对象各自持有的「变量」(HP、攻击力等),以及整个项目共有的「项目变量」。这次的「敌人数量」,比起对象持有的变量,用项目变量更合适。

  3. 点击窗口左下角的「+添加」按钮。

  4. 会出现「项目变量001」,请在右上角的输入栏中把名称改为「敌人数量」。*如果这里显示的是「变量001」,说明标签页不对,请切换到「项目变量」。

  5. 确认标签页是项目变量、名称已变为「敌人数量」之后,点击「设置完成」。

Part8-2:做一个能在游戏画面上确认「敌人数量」的 UI!

项目变量「敌人数量」现在这样在游戏中完全没有办法查看,我们来做一个能在游戏画面上确认的 UI。
UI 的制作在各个地图都有的「UI」图层中进行。放置在这个图层上的东西,无论摄像机位于何处,都会始终显示在画面上的同一位置。

  1. 切换到「地图」视图,点击地图图层中「UI」旁边的 + 按钮。

  2. 会出现选择添加什么的菜单,请选择「标签」。

  3. 在标签检查器的文本栏中,首先输入
    敌人数量:

  4. 接着点击文本栏上方的「插入数值」按钮。会弹出「插入数值」窗口,请打开名称栏中「玩家人数」的列表,改为「敌人数量」。

  5. 设置好并与下图一致后,点击「插入」按钮。

  6. 这样敌人数量就能显示出来了,但文字太小,我们来把它放大。点击文本栏下方「标签设置」的「<空>」,添加「LabelSettings」。

  7. 「<空>」会变成「LabelSettings」,再次选中并展开它。

  8. 展开「字体」,把大小设为 64 px,这样就变成了便于确认的尺寸。

  9. 进行测试游玩。画面左上角显示「敌人数量:0」就说明成功了。如果显示的是「project.敌人数量」之类的内容,说明插入时出了错,请重新插入一次数值。

※要点
UI 使用的画面范围是浅蓝色的框(不受摄像机尺寸影响)。

Part8-3:让「敌人」被打倒时增加「敌人数量」

敌人数量已经能显示了,但还没有改变数值的手段。
我们来让「敌人」被打倒时,把项目变量「敌人数量」加 1。

  1. 回到对象视图,双击敌人将其打开。

  2. 点击「编辑可视化脚本」按钮。

  3. 选择处理「敌人」失败的「dead」状态。这里已经设置了 4 个动作,我们再追加 1 个。点击「+添加可执行动作」按钮。

  4. 选择「开关/变量」中的「改变开关/变量/对象属性」。这个动作可以修改各种各样的数值。首先在右栏设置目标:
    目标对象类型:项目数据库
    数据库的种类:项目变量
    条目名称:敌人数量
    这样目标就设成了敌人数量。

  5. 接着指定要如何修改敌人数量的值。展开运算符、赋值来源,输入
    计算公式:+=
    常数值:1.0
    然后点击「添加」。

  6. 好了,现在 [dead] 状态会对项目变量「敌人数量」执行 +=1 了……但实际上目前还不会生效。为什么呢?
    请看可执行动作。当有多个可执行动作时,会从上往下依次执行,而我们添加的「改变开关/变量/对象属性(数据库|敌人~~~)」在第 4 位,第 3 位则是「自我消失」。也就是说,在修改敌人数量之前对象就消失了,处理被中断。需要调整顺序。

  7. 点击第 4 项「改变开关/变量/对象属性(数据库|敌人~~~)」左侧形似 [≡] 的按钮,向上拖动,移到「属性|disable~~」的下一位。变成第 1 项「改变开关/变量/对象属性(数据库|敌人~~~)」就可以了。

  8. 我们来测试游玩。踩踏打倒敌人时,左上角的「敌人数量」变成 1 就说明成功了。

数量不变时

请检查顺序是否正确地变成了第 1 位,以及点击展开后的设置是否与下图一致。

Part8-4:来做「通关」吧!

现在项目变量「敌人数量」会随着打倒敌人而增加了,但还需要在它变为 5 时实现「通关」。
这次我们让玩家对象显示一段「CLEAR!」的文本。

  1. 回到对象视图,把对象切换为玩家(双击),打开「编辑可视化脚本」。

  2. 通关状态同样不知道会在什么时候发生,所以从 AnyState 拉出连接。在 AnyState 附近创建一个新状态,命名为「通关」。

  3. 点击「+添加可执行动作」,选择下方文本组中的「显示文本」。然后在正文中输入「CLEAR!」。

  4. 最上方有一个「预览」按钮,点击它。在「预览」中可以一边看实际显示效果,一边调整位置和大小。

  5. 字体大小保持 12 的话太小了,改成 64。
    之后拖动手柄微调位置。大致调整到下图的位置后就可以关闭了。

  6. 调整「显示文本」动作。把右栏稍微向下滚动,会看到「持久性」复选框,请设置为
    持久性:开启
    「显示文本」动作默认是显示一段时间后消失,打开持久化后就不会消失了。打开后点击「添加」。

  7. 这样「显示文本」动作就设置好了,右键点击 AnyState 选择「添加连接」,接到通关。

  8. 点击「+添加条件」。要以变量为条件进行转换,需要使用变量组中的「开关/变量的值比较」。
    请指定
    变量类型:变量
    目标对象类型:项目变量
    这时会出现「监视的项目变量 / 开关」一栏,点击其右侧的「设置…」按钮。

  9. 会弹出「变量 / 开关的指定」窗口,选择「敌人数量」并点击「OK」。变量指定完成后,接下来设置条件的计算式。

  10. 设置
    变量运算符:>=
    比较常数:5.0
    这样就做出了「项目变量『敌人数量』大于等于 5 时」这个条件,点击「添加」。

  11. 准备应该都做好了,我们来测试游玩。接下来只要确认打倒 5 个敌人后会不会出现通关……不过那样太麻烦了,我们用调试功能吧。点击左上角菜单中的「调试」,再点击子菜单中的「打开 AGM 调试监视器…」。

  12. 会出现如下画面,但在开始测试游玩之前什么都不会显示,我们马上启动测试游玩。

  13. 显示内容会发生变化,出现玩家和敌人等对象的信息,不过「敌人数量」是项目变量,所以请切换到「项目变量」标签页。

  14. 向下滚动就能找到项目变量「敌人数量」,点击「值」列的 0.0,把它改写为 5.0。

  15. 如果画面内的敌人数量显示变成 5,并且显示出「CLEAR!」,就说明设置成功了。「踩踏打倒 5 个敌人即通关」的游戏就做好了!

※Tips
用 [铅笔图标] 可以重新编辑动作。

无法正常运作时

・项目变量「敌人数量」在画面内显示为 5,但 CLEAR!不出现。
首先在 AGM 调试监视器中把标签页切换到「对象」,点击对象「玩家」,查看「状态>主层」部分。这里显示的是玩家当前的状态。


・如果主层显示为通关……
说明转换是成功的,那就是「通关」状态的行为有问题,请检查一下。
・如果主层不是通关……
说明到「通关」状态的转换没有成功,请检查从「AnyState」到「通关」的连接。

Part9:给游戏加上「演出」来收尾吧!

到这里游戏的系统已经做好了,但既没有声音也没有特效,感觉有点单调。
最后,我们加上声音和特效,把它作为一款游戏收尾吧。先从声音开始。

Part9-1:给游戏加上「声音」!

关卡 BGM、跳跃音、敌人被踩时的音效、通关音效,这 4 种应该就够了。我们马上来加,先从素材的读取开始。

  1. 前往素材管理视图,点击「导入官方素材」按钮。

  2. 把标签页切换到「声音」,选择以下 4 项并「导入」。
    bgm > Battle_pop1
    se > 移动·动作 > Jump1
    se > 攻击·武器 > Blow1
    se > 进程·结果 > Stageclear1

  3. 会弹出「是否将读取的素材注册到声音数据库?」的窗口,点击「是」。素材注册就完成了。

如果没有注册到声音数据库就关掉了……
  1. 在菜单栏中点击「数据库」按钮。

  2. 会出现「数据管理」窗口,切换到「音频数据库」标签页,点击「批量注册到声音数据库」按钮。

  1. 接着逐个设置这些声音。先设置地图的 BGM。切换到地图视图,选择地图图层最上方的「地图设置」。

  2. 在检查器中展开「BGM设置」,设置
    音效数据:Battle_pop1
    循环:开
    这样关卡的 BGM 就设置好了,试着测试游玩确认一下吧。

  3. 接着给玩家设置通关音效和跳跃音效。这里要使用可视化脚本的动作,所以切换到对象视图,打开玩家的可视化脚本。

  4. 选择「跳跃」状态,点击「+添加可执行动作」。

  5. 选择「媒体」组中的「播放声音」,把音效数据选为 Jump1,然后「添加」。

  6. 用同样的操作,在「通关」状态中添加「播放声音」,音效数据选择 Stageclear1 并「添加」。添加后测试游玩,确认是否会播放。

  7. 最后给敌人加上声音。回到对象视图,打开「敌人」的可视化脚本。

  8. 选择「dead」状态,点击「+添加可执行动作」。

  9. 添加「播放声音」,音效数据选择 Blow1。

  10. 添加好了……但序号是 5,声音的播放会排在消失之后,所以不会执行。我们来调整顺序。

  11. 用拖动把「播放声音」的位置移到「数据库|敌人~~」之后,也就是第 2 位。

Part9-2:用「特效」「粒子」的演出来收尾!

声音设置好了,最后我们用「特效」和「粒子」功能加上演出来收尾。
设置打倒敌人时的特效,以及通关时的粒子,应该就是不错的演出了。

  1. 首先从官方素材中导入特效和粒子。移动到素材管理视图,点击「导入官方素材」。

  2. 把标签页切换到「特效/粒子」,选择以下 2 个素材并「导入」。
    特效 > E_002_attack_00
    粒子 > P_011_fire_works

  3. 导入完成后,回到「对象」视图,打开「玩家」的可视化脚本。

  4. 打开「通关」状态,点击「+添加可执行动作」。

  5. 选择「粒子 > 显示粒子」,点击「粒子对象路径」的「一览」按钮。

  6. 里面有刚才添加的 fire_works 粒子,选中它并点击「确定」。

  7. 接着点击「预览」按钮。

  8. 把「预览」画面中的橙色十字拖动到玩家稍微上方的位置。每次移动都会放出烟花,一边看一边微调,调到下图左右的位置后点击「关闭」。

  9. 点击「添加」完成添加就大功告成了。这样通关时就会放烟花了。

  10. 接着打开「敌人」的可视化脚本。

  11. 在「dead」状态中点击「+添加可执行动作」。

  12. 这次选择「效果 > 显示效果」,点击「指定效果对象路径」的「一览」按钮。

  13. 选择 E_002_attack 并点击「确定」。![image|609x500]

  14. 特效也和粒子一样可以用「预览」调整,点击预览按钮确认一下。看起来不用改动位置就刚刚好,所以直接关闭并点击「添加」。

  15. 「显示效果」会被添加到第 6 位,但和之前一样排在消失之后,所以用拖动来调整顺序。

  16. 用拖动把它移到「播放声音」下面的第 3 位。

Part9-3:从头到尾玩一遍游戏吧!

到这里,作为游戏该有的设置应该都做完了,我们从头到尾玩一遍吧。

Part10:把游戏导出为 Windows 版本吧!

到这里基本的跳跃动作游戏应该已经做好了,但就这样的话只有拥有 ACTION GAME MAKER 的人才能玩。为了让没有的人也能玩,我们把它导出为 Windows 格式吧。

  1. 从左上角菜单的「项目」中选择「导出…」。

  2. 会打开导出窗口,在这个菜单的「添加…」中选择「Windows Desktop」。

  3. 点击右侧「导出路径」栏右边的文件图标。

  4. 会打开保存文件的窗口。在这里可以选择把制作好的游戏导出到哪个位置、用什么名称。默认打开的位置是本项目自身的文件夹,请改成别的文件夹。
    例如在「我的文档」中新建一个「跳跃动作教程」文件夹就不错。

为什么不能导出到项目文件夹内?

项目文件夹内的内容会在项目启动时和游戏启动时被读取。也就是说,如果里面有导出文件,就会产生多余的读取,可能导致变慢或出现问题。
虽然通常不会造成大问题,但保险起见还是避开为好。

  1. 确定保存位置的文件夹后,在其中把文件名输入为「跳跃动作教程.exe」并保存。(需要连 .exe 一起写上。)

  2. 指定路径后,之前呈灰色的左下角按钮「全部导出」就可以点击了,点击它。

  3. 会弹出选择导出模式的窗口,请选择「发布」。

  4. 进度条出现片刻后自动关闭,就表示完成了。用 Windows 打开保存的文件夹看看,应该有「跳跃动作教程.exe」和 .pck 两个文件。.exe 是本体,.pck 是数据集合,两者合为一体。如果要分发给别人,请把两个文件一起发送。
    image

  5. 试着启动 .exe 文件。和测试游玩时一样,游戏会启动并可以游玩。至此,你的游戏就算完成了!恭喜!

结语

这份教程感觉如何呢?
虽然可能有些难度,但你已经学会了 ACTION GAME MAKER 的基本操作,
以及地图的制作方法、对象的制作方法、可视化脚本的制作方法。

不过,你可能还会有这样的疑问:

  • 标题画面要怎么做?
  • 常见的那个机关要怎么做?
  • 俯视视角的游戏要怎么做?

我们准备了讲解这些内容的进阶教程,也请一并看看。

其他教程请从目录进入!