前言
幽灵射手是一款经典的2D俯视设计类游戏,其开发教程是Construct官网给予的初学入门教程之一。作为使用Construct积木式编程开发的游戏,幽灵射手的特点是:
-
可视化界面:使用事件表等可视化模块,用户可以通过拼接积木来构建程序,降低了编程的复杂度。
-
无语法错误:由于积木式编程的设计,用户不需要直接编写文本代码,从而避免了很多常见的语法错误,用户也不需要记忆大量相对复杂的编程语法知识。
-
面向初学者:非常适合编程初学者,能够让他们在无压力的环境中养成编程思维。
-
模块化编程:积木式编程鼓励模块化设计,可以通过组合不同的积木来实现复杂的功能,易于管理和重用代码。
幽灵射手原贴:Construct 2 初学入门教程 - Free Tutorial
本人在幽灵射手原有基础上(主要是美术素材基础),改进了结构、扩充了玩法、增添了内容,开发了幽灵射手Redux(改进重置版)。
这里是幽灵射手Redux的演示视频:
GhostShooterRedux演示视频
我也在itch.io上发布了该游戏,链接:GhostShooterRedux by aakurapink (itch.io)
下文将介绍幽灵射手Redux的设计、主要创新点、技术点及其开发流程。
游戏要素和设计
1.游戏类型和玩法
本游戏是平面2D俯视角射击游戏。主要玩法包括射击击败怪物和BOSS、移动躲避怪物和BOSS攻击以及探索地图资源等。
游戏中的游戏资源和怪物分散在地图的各个位置,而BOSS盘踞在地图末尾,玩家在对地图的探索中前进,收集资源和击败怪物BOSS。
怪物和BOSS的攻击会造成玩家角色的血量损失,血量为0时游戏失败;同时玩家射击怪物和BOSS也会使其损失血量直至被击败。血量和弹药是本游戏中玩家的两大资源,为了获得游戏的胜利,玩家会主动地在地图探索中收集资源。
2.游戏角色
玩家角色:人类英雄
玩家角色特征:以枪械射击作为攻击手段,可以疾跑,有血量、弹药量和备弹量限制
敌对角色:怪物异形和BOSS
敌对角色特征:怪物异形以扑击玩家作为攻击手段,地图上存在多只怪物异形;BOSS可以召唤怪物异形,也可以发射炮弹攻击玩家,地图上只存在一只BOSS
3.地图资源
医疗包:玩家角色拾取后可以恢复血量
弹药箱:玩家角色拾取后可以增加备弹量
4.游戏目标和结局
游戏过程:玩家控制角色在探索地图资源和与怪物战斗中前进,并在最后击败BOSS
游戏分数:击败怪物会获得分数;击败BOSS会获得大量分数
游戏获胜条件:获得了足够游戏分数,并击败了BOSS
游戏失败条件:玩家角色被怪物或BOSS击败
5.游戏场景设计
游戏地图是完全平面和线性的,其中设置了墙壁和障碍物。
玩法扩充
1.疾跑和角色体力机制
作为与异形大战的人类英雄,怎么可以走得和原作一样那么慢呢?只要给角色加入“疾跑”技能,按住shift+方向键,角色就可以进行快速的移动。别忘记在玩家松开shift之后将角色的速度和加速度调回原值,否则他就刹不住车啦。

松开shift,停止疾跑
为了进一步提升游戏的复杂性可玩性,我加入了体力机制。这样当角色的体力不足时,即使玩家按住了正确的键位,也无法触发疾跑。
我们首先对角色对象设定一个新的整型变量,命名为"体力值"。体力机制的基本逻辑如下:
(1)体力值大于等于0时,角色可以疾跑;
(2)体力值小于等于0时,角色的速度和加速度将强制被调回原值。
(3) 疾跑会消耗体力值,体力值随时间自然恢复(恢复速度必须低于消耗速度)。
如果我们只考虑到上述几点的话,会出现一种神奇的状态——在几乎没有体力的情况下,只要我们反复、快速地点按shift+方向键,角色仍然可以断断续续地不停的小段疾跑,这显然不符合我们的要求。我们需要给疾跑的启动加上阈值,这样可以确保疾跑在低体力的情况下是无法被触发的。

体力机制
2.角色血量和血条显示
为了保证游戏难度的平衡,角色不应该被怪物一击秒杀,也不应该是不死之身。为此,我们需要设计一种类似于体力机制的血量机制。与体力机制不同的是,血量机制应当是可视化的(需要有血条),这样才方便玩家把控游戏的节奏。
实现可视化的血量机制,我们可以采用类似于积分版的固定在某处的血条,也可以采用跟随角色移动的血条。这里本人采用了后者。
本美术渣直接用Construct自带的画板搓了几帧动画,用以模拟血条的动态变化。血条对象的动画不能主动播放,将其播放速度设置为0即可。我们只需要在怪物对角色造成伤害时,将血条对象的动画帧+1即可。
将其导入一个新的对象,将新对象命名为血条,并将其设定为角色对象的子对象。这样血条就可以随着角色的移动而移动了。
值得注意的是,我们不希望血条随角色的转动而转动,而是希望它保持垂直或水平。这个时候需要在血条对象的"对象层级"中取消勾选"跟随角度"。

血量机制

血条效果
3.掩体和障碍物
原来的场地太空旷了,我们可以添加角色的怪物都无法通过的若干掩体,增添游戏的趣味性。
4.游戏结束和快速重开
游戏结束也是游戏的一部分(doge)。为了保证游戏结束时的仪式感,我们可以在角色GG之后,将"GAME OVER"用血红的大字打在屏幕上,同时将重新开始的按钮放在旁边。


游戏结束
5.换弹和弹药机制及其显示
角色手上的BiuBiu小手枪显然不能做到无限子弹,否则"火力覆盖"之下什么怪都扛不住。我们可以参照现实,设定换弹和弹药机制。具体构想和设计如下:
(1)同时存在弹匣内弹药量和备弹量两个数值;
(2)只有弹匣内的弹药才能被直接使用,而备弹必须先通过换弹进入弹匣内,才能使用;
(3)弹匣容量是有限度的,换弹不能超过弹匣容量;
(4)换弹需要时间。
根据上述三个点,我们可以编程如下,图中的"弹药量"即是"弹匣内弹药量":
弹药机制
该部分需要注意的有两点。
首先,玩过射击游戏的都知道,我们换弹时往往不会只摁一下R键,在急迫的状态下,我们会反复、快速地连按R键。虽然这实际上不会让换弹更快 在幽灵猎手Redux中,为了保证玩家连续按下R键时不会连续触发换弹,必须在动作中添加"系统-->等待前面异步动作完成",这样可以有效避免多个换弹动作进入换弹等待时间。
其次,我们在换弹中会遇到两种情况——备弹量不足以填满弹匣和备弹量可以填满弹匣,这两种情况需要分开处理。区分条件就是是否满足"备弹量≥弹匣容量-弹匣内现存弹药量"。
我们将换弹和弹药机制实现之后,还可以效仿积分表的做法,将弹药量和备弹量显示在游戏界面的右上角,方便玩家观察。

弹药显示
内容增添
1.角色和怪物的受击动画
角色和怪物都有血量,但无法判断攻击是否命中、血量是否发生下降怎么办? 我们加入受击动画即可解决。
复杂的受击动画可以由一系列动画帧构成,作为美术渣,我利用在事件表中修改对象的颜色来取巧实现简单的受击动画。只需要在对象受到伤害时,将其颜色调至红色,等待零点几秒再恢复即可。注意,如果要恢复原有颜色,可以将其颜色直接设置成没有更改过的素材图片的颜色。这里的"颜色"更近似于一种色彩滤镜,没有更改过的素材图片均为"无色"。


受击动画
2.战斗系统优化
原版的幽灵射手的战斗系统有诸多不合理之处,重置版着重解决了如下两个问题:
(1)怪物只会在碰撞时对玩家造成伤害,而之后哪怕贴脸也无法造成伤害;
(2)所有的怪物会在开局直接涌向玩家,战斗过程太过于短平快。
基于问题(1),我们可以设置一个持续产生的伤害,条件是角色和怪物出现了重叠。

重叠动画
基于问题(2),我们可以尝试只将距离玩家最近的怪物转向玩家所在的坐标,同时随机设置怪物的速度。

一个一个来,车轮战
3.医疗包和弹药箱
作为和怪物搏斗的英雄,我们的角色怎么可以没有后援补给呢?我们可以添加医疗包和弹药箱,分别用于补充玩家的血量和备弹。


医疗包和弹药箱(看起来是不是有些眼熟?hhh)
4.地图扩大
如标题所说,改进重置版的地图是原版的十几倍大小,怪物数量也多不少,疾跑和体力机制因此更重要了(确信)。
5. 增加游戏启动界面
进入游戏直接转到战斗场景难免使人感觉猝不及防,我们需要增加一个游戏启动界面防止这样的问题发生。
首先我们用市面上常见的AI大模型生成几张图片素材(我这里用的是智谱清言):

背景素材

按钮素材
其次,我们新建一个"场景 2",并将其设置为起始场景。
将按钮素材拆分、抠图为"Play"和"Exit"按钮,作为"精灵"导入场景 2,点击"Play"精灵即可加载场景 1(我们先前已经设置好的战斗场景)。什么,你问"Exit"它有什么用?抱歉,我么有找到Construct3中可以直接退出程序的动作,所以目前来说它只是一个装饰。
为了让按钮更有互动性,我们还可以让按钮在鼠标悬停于其上时高亮。实现原理类似于前面的"受击动画",将精灵设置成中灰色即可。

按钮设置
6.增加BOSS
一个没有BOSS的动作或射击游戏是不完整的!为了让玩家不那么无聊(怪只有一种),我们可以做一个BOSS放在地图最后压轴,只有击败BOSS才能获取胜利。
在我的设计中,BOSS会在角色对其造成伤害后"觉醒",开始向角色缓慢移动,并发射炮弹,还可以间歇性地召唤小怪。当BOSS的血量低于三分之一时,它会进入"狂暴"状态,体型变大、移速变快、发射炮弹和召唤小弟的频率加快。
BOSS的素材是由智谱清言AI大模型生成的。(有一说一,比我自己画的好看多了)

7.游戏胜利
虽然本游戏有些难度,但是勤学苦练之下一定能够胜利通关!(我没看到科技,我只看到了努力与汗水!doge)
"游戏胜利"的提示在编程上和"游戏结束"一样,只需要将"GAME OVER"改为"YOU WIN",再将字体颜色改为黄色即可。
总结
幽灵猎手Redux(改进重置版)在原版的基础上作出了大量改进,事件表长度也是原版的十倍左右。即使如此,该游戏仍然有许多可以进一步开发的地方,欢迎各位友友和大佬交流分享~

533

被折叠的 条评论
为什么被折叠?



