前言
本篇是《躲避砖块小游戏》系列教程的第三篇,前两篇已经发布,分别是 Micro:bit 模拟传球小程序 和 Micro:bit 重力控制水平仪,今天我们将以一个大家小时候都非常熟悉的游戏(暴露年龄的时候到了)–超级玛丽为例,分析一下制作一个简单小游戏所用到的基本概念,文末有彩蛋呦。
一款游戏涉及到的概念有:
- 场景
- 精灵
- 动画
- 关卡
- 事件
- 碰撞检测
- 胜利失败条件
- 记分系统
下面我们一一来分析
场景
游戏的场景指的是游戏里人物所处的环境,包括了天空,海洋,云朵,树木等等,它会随着主角的位置不同而变化,比如超级玛丽里面,就有不同的场景,有白天,有黑夜,有海洋,这些不同的场景形成了不同的视觉效果,同时也带来了不同的玩法,比如在白天的场景里,主角可以奔跑跳跃,而到了海洋里,主角就可以游来游去
后面移动的蓝天白云,小山坡共同构成了游戏场景。
精灵
精灵是游戏里面的重要元素,我们可以把它理解为一个可以进行操作的图片,它可以移动,可以变形,可以有各种各样的属性,比如超级玛丽里面的主角就是一个精灵,可以奔跑跳跃游泳踩乌龟吃蘑菇顶金币钻管道,除了主角之外,路上爬的乌龟蘑菇,天上飞的炮弹,水里游的章鱼,甚至一个砖块,钱币箱子,水管都可以看作是一个精灵,每个精灵都有自己不同的属性,属性也分为很多种。
- 对于主角来说,属性是当前的位置,是大人还是小人还是子弹人,是否存活等
- 对于敌人(乌龟蘑菇)来说,属性是当前的位置,有没有被主角踩到,龟壳是否翻转,是否存活等
- 对于一块砖头来说,属性是有没有被主角顶到
- 对于钱币箱子来说,属性是有没有被主角顶空,还有多少钱币可以顶
- 对于旗子来说,属性是有没有被主角踩到
可以发现,除了主角以外的精灵,基本上都是为了主角而存在的,或者给主角提供增益属性,或者为了阻碍主角让它死翘翘
动画
这个很好理解,游戏里必不可少的就是动画了,它是让游戏变得形象生动的根本原因,从一个砖块被顶掉,到主角跑动,到主角碰到乌龟死亡,都少不了动画的存在
关卡
小时候最高兴的就是把一个游戏打通关了,而这个通关的关,就指的是关卡,超级玛丽是一个典型的过关游戏,一共有8关,每个大关有4个小关,每个关卡由不同的场景构成,有白天黑夜大海洋,还有隐藏关卡,可以上天入地跳关,但是现在的很多游戏越来越弱化关卡的概念了,比如很多的沙盒游戏都是开放世界,基本不存在关卡让你去一个个突破
事件
事件我们前面的教程里已经涉及到了,事件代表一件事情发生了,比如按下手柄上的左键,主角就向左移动,按下B键,主角就跳跃,事件是玩家和主角交互的纽带,玩家通过手柄发出各种各样的事件来控制主角进行游戏,同时游戏里也有各种各样的事件,比如主角头顶了一块砖头,那这块砖头就掉落,或者长出一颗升天树,主角跳起来踩死了一只乌龟,那么乌龟就变成龟壳翻过来等等,正是因为各种各样事件,连接起了主角和各种敌人或道具之间的互动。
碰撞检测(选择了解)
这部分作为选择了解的内容,如果不是很理解可以跳过,制作 micro:bit 小游戏这点不是必须的,micro:bit 提供了现成的碰撞检测模块,我们直接用就可以了。碰撞检测是游戏实现里一个非常重要的部分,它是许多事件的基础,比如主角头顶砖块这个事件,我们怎么判断主角的头碰到了砖块呢?或者怎么判断主角踩到了乌龟呢?这就需要用到碰撞检测了。
为了方便解释,我们可以把主角和蘑菇都想像成两个矩形,
-
屏幕左上方为 坐标原点,水平方向为 x 轴,垂直方向为 y 轴,x 轴向右为正,即越往右 x 的值越大,y 轴往下为正,即越往下 y 值越大,
-
主角的矩形宽为 w1,高为 h1,主角所在的矩形(称为 主角矩形,下同) 左上角坐标为 (x1, y1),
-
蘑菇所在的矩形(称为 蘑菇矩形,下同)宽为 w1,高为 h2,左上角坐标为 (x2,y2)
那么怎么计算两个矩形碰撞了呢?原理就是看两个矩形有没有重叠的部分,两个矩形可能出现以下几种情况(只考虑碰撞的情况):
图片来源:https://github.com/JChehe/blog/issues/8
具体算法如下:
x1 < x2 + w2 && x1 + w1 > x2
&& y1 < y2 + h2 && y1 + h1 > y2
解释一下:
我们可以把 x1 看作 主角矩形 的左边线,把 x1 + w1 看作 主角矩形 的右边线,x2 看作 蘑菇矩形 的左边线,x2 + w2 看作 蘑菇矩形 的右边线,y1 看作 主角矩形 的 上边线,y1 + h1 看作 主角矩形 的下边线,y2 看作 蘑菇矩形 的上边线,y2 + h2 看作蘑菇矩形 的下边线,因此得到:
x1<x2+w2
的意思就是 主角矩形 的 左边线 在 蘑菇矩形 右边线 的 左边x1+w1>x2
的意思就是 主角矩形 的 右边线 在 蘑菇矩形 左边线 的 右边y1<y2+h2
的意思就是 主角矩形 的 上边线 在 蘑菇矩形 下边线 的 上边y1+h1>y2
的意思就是 主角矩形 的 下边线 在 蘑菇矩形 上边线 的 下边
注意这 4 个条件是并列关系,即需要同时满足,不满足其中的任何一条都不能表明两个矩形碰撞,不管主角矩形在蘑菇矩形的上下左右哪个方向,这个条件都适用,大家可以对照上面的图案里所示的 8 种情况自己体会一下。
胜利失败条件
胜利失败条件决定了游戏何时结束,游戏胜利结束,意味着过关啦,游戏失败结束,意味着 Game Over,对于超级玛丽来说,每一关的胜利条件基本一致,都是到达大本营升起小旗旗(关底是打倒大魔王)
而失败条件有许多种,比如碰到乌龟蘑菇炮弹章鱼等死亡,或者掉到坑里摔死,或者未在倒计时结束前到达大本营也会失败
记分系统
最后来说说记分系统,它是游戏过程的一种统计手段,玩家进行不同的操作,可以获得不同的分数,比如顶金币可以加分,过关可以加分,踩死敌人可以加分,过关胜利剩余的时间也会换算成分数,记分系统是一种反馈系统,可以让玩家直观的看到自己在游戏里的表现,分数越高代表在游戏里的表现越好,并且能够激励玩家追求更高的分数,像很多街机游戏都有分数排行榜,包括现在很多网游里面的名人榜等,都是类似的设计,为的就是激发玩家心中的那一点点虚荣心理,为了追求更高的分数(排名)而在游戏里花费更多的时间。
[amazon_link asins=’B0746C94ZW,B079L5NRXF,B079HKT1BD’ template=’CopyOf-CopyOf-ProductGrid’ store=’boyd-23′ marketplace=’CN’ link_id=”]
总结
这篇教程总结了一下实现一款游戏的基本要素,包括场景,精灵,动画,关卡,玩家与角色或者角色与道具之间要用到事件来进行连接,而碰撞检测是事件的基础,另外游戏也需要记分系统来给玩家直观的反馈自己在游戏里的表现。我们也需要考虑一款游戏它的胜利和失败条件分别是什么,这样才能让游戏正常退出,不会无限循环下去,当然也有例外,比如跑酷游戏基本上是无限设计,为了让玩家追求更高的分数,而可以让玩家只要不失败就可以一直玩下去,所以跑酷游戏设计了很多让玩家失败的因素,而没有明确的胜利条件。
彩蛋:
原文始发于微信公众号( 暴王不暴燥 ):前导知识-从超级玛丽看游戏制作基本要素