“
Scratch 我已经会用了啊……然后呢?
”
对啊,然后呢?
很多孩子都面临这样的情况:学了各种教程,明白了每一个模块,但还是编不出自己的游戏来;做来做去,大家做得好像都差不多,玩玩就没有什么新鲜感了。
听过很多模块,依然编不好这个 Game.
我们总不能真的是要做个只会用工具的码农吧?缺的到底是什么?
……是想法,和实现想法的技巧。
Alex 老师的《想·法》 Scratch 游戏编程课开讲,就是要给你想和法。
“想”是思想,是思路,是告诉你如何去构思、设计游戏,并一步步拆解落地;
“法”是方法,是技巧,是让你不但懂得模块,更会用模块去完成设计的各种功能。
Alex 老师
我会围绕着游戏设计思路和编程实现技巧来讲Scratch,而不是Scratch功能本身。这可能是《想·法》与其他教程最大的区别吧。
那么,我们开始吧。
第一讲|用键盘控制角色
我们用 Scratch 设计的各种游戏,归结起来,基本有这么几类:
1. 射击类的。飞机打飞机,坦克打坦克,战士打僵尸,好人打坏蛋;横着打,竖着打,转圈打,第一人称打,看你想怎么打。
2. 平台类的。超级玛丽横着跑,英雄塔楼竖着跳,大家都是在一个平台上跑来跳去,掉在平台外面就Game Over 了。
3. 桌面类的。小猫走个迷宫,小鸟砸个猪头,球拍接个弹球,这些都是从桌面游戏的玩法发展出来的。
4. 竞速类的。赛车,赛马,赛跑,有时候还需要躲避个障碍啥的。
5. 角色扮演类的。勇者斗恶龙,林克救公主,到处打怪升级,翻箱倒柜……
当然还有塔防类啊,音乐类啊,体育类啊,等等,不一而足。
在我们设计这些游戏的时候,都有一个基本的功能要做,就是用键盘控制游戏里的角色。
今天我们就一起来学习一下,有哪些常用的控制方法。
第一种:最简单的控制
难度系数:
如上图。这是最简单的控制方式。按不同的方向键,就让角色朝向不同的方向,只要按键不松开,角色就一直前进。
你可能会碰到角色来回颠倒的情况,只要在角色列表里点击角色左上角的蓝色小 i ,将旋转模式由第一个转圈(任意模式)改为第二个(左右翻转)或第三个(不旋转)就可以了。
但是实际上,这种控制方法在游戏设计当中几乎不可用,因为太不灵活,特别是当你需要角色斜着走的时候,这种方法让你想砸电脑。
不过,这种控制方式也不是完全不可取,特别是当你不想让角色斜着走,就要横平竖直的移动的时候,它就排上用场了,但是要稍微改造一下,不然还是太不灵活。
第二种:贪食蛇控制法
难度系数:
这种控制法最经典的一个应用场景就是《贪食蛇》游戏,Alex 老师管它叫贪食蛇控制法。在贪食蛇游戏里,我们只需要那条蛇横着走,或者竖着走,不能斜着走,但是要一直走。程序如下图。
第一部分是给角色做初始化(确定游戏开始时角色的状态,包括位置、大小、显示与否等等。以后会有专门解释初始化的课);第二部分让角色在程序开始时就开始移动,不需要玩家控制。第三部分用键盘控制方向。
这个时候有些孩子要问了:
第一部分和第二部分难道不能连在一起吗?
理论上当然可以,但是我们也要追求一种东西,叫做“程序的可读性”。
什么是“程序的可读性”?就是要让别人一看就能明白。我们把不同功能的代码分成不同的模块分开放置,最好再加上注释,这样我们把代码交给别人,即便别人没有参与代码编写,也很容易看懂。
那孩子又会问了:
为什么要强调可读性?为什么要让别人看懂?我自己懂不就行了嘛?
并不是。现在我们编写的程序小,一个人就能搞定,确实自己看懂就行了。但是以后我们写的程序越来越复杂,越来越庞大,一个人根本搞不定,需要很多人来共同完成,“可读性”就特别重要了。所以我们要从现在就开始,养成良好的编程习惯。
第三种:坦克控制法
难度系数:
会了前两种控制法的基础,我们就可以玩坦克的控制方法了。(为了降低难度,这里忽略了坦克炮塔的独立控制。以后我们用专门一课做复杂的坦克控制)
坦克是个笨重的大家伙,运动迟缓,原地转圈。为了模拟这个特点,我们可以用左右方向键让坦克旋转,用前后方向键让坦克前进或后退。开做!
首先,我们需要一个坦克。
哎呦哪来的坦克?角色库里没有啊!
Alex 老师
没错,这是 Alex 老师自己画的坦克。Scratch 的矢量绘图工具其实能画出挺不错的东西呢。以后开课教你。
控制方法其实不难,看上图。第一部分仍然是初始化;第二部分控制坦克,用左移、右移键控制坦克左转或右转,坦克很笨重嘛,转的慢,所以这里的数值很小,只有2;用上移、下移键控制前后移动,前进就是“移动4步”,后退就是“移动-4步”。
自己动手做出来吧。玩一玩你就会发现,这种方法还有一个挺酷的地方,坦克可以一边转向一边前进或后退,这样就可以转大圈了。这样的坦克大战一定很爽!
第四种:战机控制方法
难度系数:
上面三种控制法,一个比一个好用了,但终归还是不够灵活,下面我们就来做一个“身姿敏捷”的控制方法:战机控制法!不多说了,先来架战机!
角色库里也没有这个啊!Alex 老师不带这样的,尽弄些我们没有的!
Alex 老师
哈,自己画呀!这也是在 Scratch 矢量绘图工具里画的。耐下性子来认真画,你能画的比我好。
接着就是控制方法了。直接上图。
这种控制方法在空战游戏里用的最多,所以 Alex 老师取名战机控制方法。在所有控制方法中,这是我们用的最多的一种,它操作灵活,而且可以控制角色斜着走!在你需要灵活控制的场景,比如飞机躲子弹,你就必须要用酱紫的方法。
具体来说,程序在循环往复的不停检测(“重复执行”),某个方向键是否被按下?如果确实按下了(“如果”后面的浅蓝色条件判断为真),那么就向着相应的坐标方向移动。这里需要坐标的相关知识,如果不懂也没关系,先用起来。Alex 老师也会有专门的课程讲解坐标。
第五种:惯性战机控制方法
难度系数:
在上面的各种方式里,虽然控制越来越灵活,但是控制的“手感”并不是很好,为什么呢?因为不符合人的直觉。
当我们松开方向键的时候,角色的移动就会立刻停止。但是在现实中,物体运动都是有惯性的,从运动到停止都是有一个过程的。而上面的控制方法中,战机也好,小猫也好,我们手一抬,它们就立刻停下来,这不符合现实世界的运动规律,也会让我们潜意识感到不舒服。
所以我们就要做一种有惯性的移动控制方式。这个控制方式可以让角色在你松开键盘后慢慢的停下来。我们还用战机做例子。
思路其实不难:按下方向键的时候,飞机匀速运动;松开方向键,速度不停地变慢变慢,变成0,飞机就停下来了。为了实现速度变慢,我们需要用到变量。(还不懂变量的童鞋,表着急,先用着,Alex 老师可以开课专门说变量)
首先我们给战机角色取名“战机”。我们建立两个变量:战机 X 速度,战机 Y 速度。
有了变量和对变量的操作模块,我们就可以写代码啦。
代码如上。具体是酱紫:
用两个变量,作为战机 X 轴和 Y 轴方向的速度;
开始运行时,两个变量的值均为零;
只要你按下方向键,就赋予变量一个不变的值(这里是6或-6),战机就会向着一个方向匀速运动;
当不再按键时,变量的值就会不停的乘以0.9,不停的衰减衰减衰减;
这个变量值又在不停的改变战机的坐标数值,所以战机就会移动的越来越少,看起来就是慢慢减速停止。
上图里,Alex 老师只给出了 X 轴方向的控制,你自己把 Y 轴控制做出来吧。对一个编程方法最好的理解过程,就是自己动手做一遍。
Learning by Doing, Learning through Play.
自己动手编一遍,运行一下,看看什么效果;修改一下各个数值,比如把6改成10,把0.9改成0.7,一次改一个,看看效果又有什么不一样。
第六种:滚个球!的控制方法
难度系数:
有时候,我们需要控制的角色滚动着前进,比如球类游戏里的球。这个时候我们就需要“滚起来”的控制方式了。
在前面惯性控制方式基础上稍加改动,我们就可以获得滚动效果了。
具体思路与第三种控制方式类似,我们同样用一个变量作为球旋转的角速度;球在缓缓停止的时候,球的转动也缓缓停止。
首先,我们先从角色库里选择一个球,把这个角色命名为“球”,旋转模式设定为“任意”。
我们建立两个变量:“球速X”和“球转速”。
“球速X”和上种方法里的“战机 X 轴”变量一样,作为球的 X 轴方向的速度;
“球转速”则作为球旋转的速度变量;
其他的都和上一种方式一样一样的了,上图!
第一部分还是球的初始化。游戏开始的时候,球的大小、位置、旋转模式、还有两个变量的数值,都在这里定义。
第二部分和上种控制方式代码很像。只要你按下方向键,就赋予两个变量不变的值(X轴运动速度10,旋转角速度15),球就会向着一个方向匀速运动并匀速旋转;当不再按键时,两个变量的值就会不停的乘以0.9,不停的衰减衰减衰减;两个变量值又在不停的改变球的坐标数值和旋转角度,所以球就会移动的越来越少,转的越来越慢,看起来非常符合直觉,非常逼真。
好了,按照例子自己先做一遍;成功以后,自己再加上 Y 轴的运动控制吧!
第七种:僵尸围城控制方法
难度系数:
这一讲本来应该结束了,忽然想起来还有一种打僵尸的玩法可以说一说,想来想去还是补上吧。(好累啊,不想写了。)
很多打僵尸的游戏,在俯视视角下,僵尸会从四面八方向玩家涌过来。玩家除了要上下左右的移动躲闪,还要向每个方向射击。此时的控制方式是鼠标和键盘的结合,用键盘控制移动,用鼠标控制面朝的方向。
首先我们先画一个战士。(好累啊,画一个俯视的脑袋代表吧,带着棒球帽,能看出方向就好。)
用鼠标控制朝向很简单,让战士始终“面向鼠标指针”就好了。
键盘控制移动的部分和第四种控制方法几乎一样。不过右手要用鼠标,左手为了顺手,把控制键由 改成了 W S A D。看图。
好啦!七种常用方法都在这儿啦!都掌握了以后,你既可以从功能出发去设计游戏,也可以根据你的设计需求,把它们当做零部件,装在你游戏里。当然,实际游戏设计中肯定还有更多不同的控制形式,欢迎在留言中分享!如果有什么不明白的,或者认为我说的不清楚、不到位的,也非常欢迎在下方留言!
按理说这里应该配一个课程讲解的视频,实在没精力做了,以后补吧。
下一期,我们可以进一步聊一聊对角色的控制:重力与跳跃!不要走开!马上回来!
2016-2020 張飛 保留所有权利。
领取专属 10元无门槛券
私享最新 技术干货