这系列文章主要是记录博主在交互媒体课程中的收获和体会
这篇文章记载的是博主交互媒体课程作业的过程与体会,如有不妥之处还望看官们批评指正。
首先推荐一下《代码本色》这本书,非常详尽的Processing教程,虽然说是需要一定编程基础,但是其实书里面本身就从很基础的部分讲起了,讲述了很多使用方法的使用,简单的比如本次作业使用的向量、力模拟、粒子系统等等,复杂的也讲到了人工智能、遗传算法模型等等,非常适合初学和进阶学习,而且资源很好找。
本来是想延续以前掌握的unity来做的,后来觉得一来毕竟processing才是课程主题;二来这种比较小巧可爱的游戏也的确比较适合用processing来完成。版本使用的是windows下的processing3.4,小巧方便且功能完备,缺点就是不会自动退格,很多时候加循环判断之后整个版面就变得乱七八糟,看的很难受。
故事背景
在遥远的某处有一个彩色的国度,生下来就是黑色的你与周围格格不入;
每一个人都想把你染成他们的彩色,但是你就是你;
拿起你的武器,一边躲避一边战斗吧,至死方休。
操控说明
鼠标左键控制开始游戏;鼠标右键控制暂停。、继续;鼠标中键截图
键盘z/x释放相应技能
关于玩家
鼠标控制玩家移动,注意不是直接跟随,会有一定延迟,
接触敌人游戏结束。
关于敌人
一、逐渐向鼠标靠近的包围型敌人,特点是出生点离玩家越远加速度越大,
逼近玩家时会模拟阻力逐渐降低速度,作用是限制玩家走位;
二、会直冲向鼠标位置的攻击型敌人,特点是出生时直冲向当时的玩家位置,
到达位置后会减速然后再次寻找玩家位置进行攻击,作用是狙击玩家。
关于技能
屏幕上最多同时保持三个,不吃会自动消失,吃下可以分别在zx键中储存一个:
CLEAN:使用会清除屏幕上全部敌人
BOMB:使用会在周围生成炸弹领域
CANON:使用会在原地放下一座大炮,朝玩家发射炮弹保护玩家
SHIED:使用会生成一个防护罩抵挡一次攻击
SOLDIER:使用会生成一名士兵朝敌人最多的地方前进消除敌人
玩法描述如上,故事背景有点中二,不过确实有这种想法,具体体现在包括死亡的时候致死的敌人会爆开,表示同归于尽;死亡提示的颜色也会根据致死敌人的颜色做改变,见截图。
游戏开始界面如上,中间是游戏说明,左上右上分别是实时的得分和技能。
游戏结束界面分为最高分和非最高分两类
普通的躲避球基本体系如上,我自己很喜欢也能够体现创意的是技能系统。原本预想的技能有五个,实现了三个,还有两个会说一下思路
因为游戏过程比较长,gif不好截,所以用了简单的截图说明。
图中的三杠吃掉就会储存一个clean技能,作用是抹杀在场所有敌人,类似一般飞行游戏中的大招。
图中的圆环吃掉就会获得一个bomb技能,有一种谁来谁死的效果。
吃掉方块可以储存一个炮台,图中是炮台放下的效果。持续时间长杀伤力大,但是很容易干扰视线。
SHIELD显而易见就是一个防护盾,这里只要多加一层碰撞的判定和shield的持有与否判定就可以完成;
SOLDIER有点像是一个寻路AI的设计,有些难度,不过我想可以通过遍历从soldier自己发出的三百六十度的射线来判断哪条射线接触到的彩色更多就说明球更多,就往那个方向前进。
普通的躲避球大家都玩过,很多时候就是无脑穿梭就可以苟住,因此我设计了两种敌人随机出现,他们的行动模式和特点可以巧妙互补,逼迫玩家无法用固定模式进行生存:
包围型的特点是出生点越远速度越快,因此玩家如果想要防止包围型的过快速攻击就要尽量待在中间。但是包围型与普通游戏冲向玩家的敌人不同,他们在靠近玩家的同时会降低速度,像是小心谨慎的敌人在做捕猎前的包围,可以极大的限制玩家小范围的走位,让玩家不能在小范围靠左右横跳蒙混过关;
狙击型的特点是速度快且直冲向玩家,如果玩家不移动,包围型可能需要一段时间才会真正碰到玩家,但是狙击会直接冲过来结束游戏;因此玩家需要不断移动来躲避狙击;移动速度很快的话也很容易拜托包围型敌人,但是东奔西撞的狙击型在玩家快速移动的时候很容易截胡玩家。
因此两种结合可以真正的难到玩家。
但是,单纯的躲避一定不是大部分人喜欢的,因此我还安排了攻击手段,而且攻击杀敌获得的分数原大于单纯苟活会获得的分数,相当于鼓励玩家获取和使用技能。注意,提供技能可不一定是降低游戏难度,我自己就常常死在吃技能的途中,技能是强力获取分数的途径,同时也是一个很大的诱惑;
考虑到有的玩家会希望储存技能来保命,比如clean和bomb都是很好的保命技能,因此我设计了固定技能槽,最多只能存两个,存满不用吃新的也没用;如果玩家吃了两个保命的技能想存下来,此时出现了纯杀伤性的技能canon,玩家想要利用canon得分就一定要用出手头上的技能,从而强迫玩家进行技能的更新和使用。
游戏的基础核心有四个,玩家控制,敌人生成,游戏过程和死亡过程。技能比较核心的是canon的射击。
玩家控制
主要做了一个变色拖尾的效果,然后为了简单的模拟了阻力以让鼠标不与玩家位置实时同步,增加操作难度和视觉趣味性。
敌人生成
敌人相当于一个粒子系统,刷新和显示相关的类和方法写在独立标签中,和canon类似。
比较有特点的是为了避免敌人突兀出现导致一开始难以躲避,我设置了递减的shake来让敌人由小变大的出现,给玩家足够的初始反应时间(叫shake是因为本来想让它闪一闪,后来效果太差就改成变大了)。同时设定了每个球的生命时长,过时间自动变小消亡。
行动模式分成两类,横冲直撞和逐渐减速包围。
游戏过程
主要负责具体的刷新和绘制
主要用于显示死亡界面,创意点在利用角向量随机生成的彩色颜料泼洒效果。
技能
CLEAN就是遍历remove,BOMB和CANON就是在固定时间内碰撞remove。
通过学习和应用粒子系统类 Arraylist 和向量库 PVector 的各种功能,加上力和角向量的简单模拟,算是掌握了基础的processing内容。同时在尝试学习的过程中也接触了一些这次没用到但是很有意思的内容例如音乐库minim和碰撞引擎Box2d等等。
可以说最大的收获就是我对processing的认识得到了改观,也更加深入了。我原来是觉得processing的图像绘制上有一些繁琐冗杂,深入使用了之后觉得确实在很多效果的绘制上processing是有自己很大的优势的期待以后能进一步用processing做出更有趣的交互作品。