关于本教程
在本教程中,我们将通过制作一颗边弹跳边飞行的火焰子弹,来讲解
ACTION GAME MAKER 的「子弹」系统
以及精灵动画的制作方法。
我们会使用在「跳跃动作教程」中创建的项目来进行讲解。
ACTION GAME MAKER 的子弹系统可以按以下步骤设置:
- 创建子弹用的对象
- 在发射源对象的子弹设置中进行登记
- 用发射源对象可视化脚本中的「发射子弹」动作来发射
Part1:来做子弹用的对象吧!
首先我们来制作子弹用的对象。这次要讲解的是如何用非模板格式的图像制作动画,以及判定动画功能的用法。
Part1-1:不使用模板的精灵动画制作方法
所谓精灵动画,就像是翻页漫画一样,通过按顺序显示图像来实现动画的功能。上次我们用模板格式一口气读入,这次来学习逐格选择制作的方法。
-
准备子弹用的图像。在「素材管理」视图中点击「导入官方素材」。
-
选择「武器」中的 P_002_fire.png 并「导入」。
-
在「对象」视图左侧的对象一览中点击「+新建」。
-
设置
对象名称:火焰弹
对象组:Player_Bullet
碰撞角色:玩家的子弹
然后在下方栏中选择「子弹(基本)」并点击「创建」。 -
切换到精灵动画标签页,点击「使用精灵动画」按钮。
-
点击右上角的「从素材表添加」按钮。
-
在「添加动画」窗口中点击「确定」。
-
命名为「move」并点击「确定」。
-
会打开「从素材表添加帧」窗口,点击「从图像一览…」按钮。
-
选择刚才添加的「P_002_fire.png」并点击「确定」。
-
图像被添加进来了,但有点小,我们放大一下。把「显示缩放」下拉框改为 800%。
-
接着,这张图像本来是 4 格,但现在被当成 1 格,我们来分割它。把「水平格数」设为「4」。图像上会出现竖线,变成 4 格。
-
接下来把判定的尺寸调整到与单格一致。点击「初始判定调整」按钮。
-
墙壁判定和攻击判定看起来都太大了,我们来调整。
-
拖动墙壁判定的手柄进行调整,大致调成宽 8、高 12。(预览的缩放可以用鼠标滚轮完成。)
-
切换到攻击判定进行调整。攻击判定要稍大一圈,大致调成宽 12、高 16。完成后点击「确定」。
-
最后添加帧。系统会按点击的顺序读入,所以从最左边的格子开始依次点击 1、2、3、4,完成后点击「添加」。
-
这样动画就添加好了。下方的「帧」栏中显示出刚才的 4 张图像就说明成功了。
-
试着点击窗口左上角的 [
] 按钮,可以预览动画,能看到火焰弹闪闪发光的动画已经加进去了。
Part1-2:用判定动画让图像旋转起来!
-
把标签页切换到判定动画。
-
判定动画是可以逐格设置判定以及图像的位置、大小、旋转状态等的功能。这里我们要设置让「对象图像」旋转。
首先在「要素(部分已隐藏)」栏中选择对象图像。 -
在最下方的「move(4 帧)」栏的 5 个格子中,选择 END。
为什么动画只有 4 格,第 5 格却有 END?
简易动画功能是在「每一格开始播放的时间点」设置关键帧(状态)的功能。如果只有 4 格,就无法设置第 4 格结束时的状态=循环结束时的状态,因此仅在判定动画中会自动追加一个 END 格。
-
在右侧检查器的「Node2D > 变换」中,把「旋转」的值设为 360。这样就设置好了动画播放结束时的「旋转」值(这称为关键帧)。第 1 格的关键帧会自动设为创建时的状态=0 度,中间各格的关键帧会自动插值,所以只需这样设置就完成了。
-
试着点击窗口左上角的播放按钮,图像应该会不停旋转。如果不顺利,请检查是否确实把 END 格设为了 360 度——也可能是忘了切换,把第 1 格设成了 360 度。
为什么播放结束后 END 格的旋转变成了 359.9?
这只是显示上的问题。在启用循环播放的情况下,播放时 360 度的状态=真正的 END 状态会自动回到 0 秒位置,所以显示的是回退前一刻的状态,而 END 上确实设置了正确的 360,因此没有问题。
Part1-3:来修改移动速度和重力的设置吧!
接下来我们把它改成符合子弹的动作。移动速度要比玩家快,而且因为要弹跳,还需要受到重力影响。(普通的子弹不受重力影响,所以模板中禁用了重力。)
-
切换到预览标签页,在要素一览中选择「移动与跳跃」。
-
在右侧检查器的「移动速度设置」中,设置
左右移动量:500
上下移动量:500 -
稍微往下,「跳跃设置」中的「重力影响」值是 0,把它设为
重力影响:5.0
重力的默认值是 1.0,所以这里给这颗子弹施加了 5 倍的重力。普通重力下动作会显得轻飘飘的,特意施加较强的重力可以让动作更利落。 -
这样对象的设置就完成了,保险起见「保存」一下。
Part2:来设置子弹的可视化脚本吧!
接着给子弹设置可视化脚本。
-
点击「编辑可视化脚本」。
-
点击「创建可视化脚本」按钮。
-
把状态001 修改如下:
要分配的动画>动画类别名称:move
标题:移动 -
在「移动」状态中点击「+添加可执行动作」。
左栏选择「移动>模板移动设置」。
右栏把「模板移动类型」设为「弹跳」,并勾选「重力下落时也反弹」。
弹跳是指碰到可碰撞物体时会反弹的移动方式,这样撞到地面时就会弹起。
关于模板移动动作
「模板移动设置」一旦执行,就会持续指定的移动,直到被别的模板移动命令「停止」为止。也就是说,即使跨越多个状态也会保持同样的动作,对于只做简单移动的对象来说非常方便。「敌人」的左右移动也是用它做的。
-
接着设置碰到敌人时消失。在附近创建一个新状态,把名称改为「消失」,然后点击「+添加可执行动作」。
-
添加「消失/复活」中的「自我消失」。
-
最后设置连接。从「移动」状态连接到「消失」状态,然后点击「+添加条件」。
-
左栏选择「对象控制>接触受击判定」。
右栏把「从该对象视角的接触方向」全部方向启用,目标对象类型设为「对象组」,目标对象组设为「Enemy」,然后添加。 -
这样碰到敌人就会消失了,但就这样的话,只要不碰到敌人子弹就永远不会消失。我们让它从侧面撞到墙壁判定时也消失。再次点击「+添加条件」。
-
左栏选择「接触碰撞体」,右栏设置
从该对象视角的接触方向:左、上、右(!!不含「下」,如果把「下」也加进去,子弹就不会在地面弹跳而是直接消失!!)
之前条件的逻辑关系:「OR」
这里很容易弄错,请仔细确认后再添加。 -
查看「接触碰撞体」,图标正确显示为「OR」就没问题了。这样子弹这边的设置就完成了。




























































