引子
简单的介绍一下,一些游戏引擎是有一个隐形小地图存在的,这个隐形小地图通常用来侦测碰碰撞和移动。那么,一个大地图引擎的背景肯定是很大的(一般来说大小都超过200),如果我们要做出一个枪战作品,那就迟早会发现一个问题:子弹在屏幕之外时,是无法打中目标的,也就是说,子弹被舞台区限制了。有些创作者可能会觉得,直接给子弹加个透明边框不就行了吗,或者做一个大的造型与真实造型来回切换也不就可以吗?嗯,可以说这些想法都非常好,但是这样做会有大量bug存在,且解读性差,不好修改,对后期创作有深远影响。这个时候有人就想出办法了:只要在舞台区内检测碰撞不就行了吗?于是做出了刚刚说的隐形小地图,但是,新的问题出现了,由于隐形小地图与大地图的大小不一,所以就算能侦测到碰撞也无法在大地图中检测到碰撞发生的位置。
这个时候,就要用到一个重要的变量:缩小系数。简单介绍一下缩小系数,由于隐形小地图与大地图的大小不一,但是隐形小地图与大地图的大小却成正比例关系,是一个固定的值,这个比值就是缩小系数。
缩小系数是自定的,一般我们做的时候,隐形小地图的大小会随着大地图的大小的变化而变化,这里出几个公式:
关于大小:大地图大小*缩小系数=小地图大小,小地图大小/缩小系数=大地图大小,小地图大小/大地图大小=缩小系数。
关于坐标:大地图坐标*缩小系数=小地图坐标,小地图坐标/缩小系数=大地图坐标,小地图坐标/大地图坐标=缩小系数。
有了这几个公式,该怎么实现我们想要的功能也就显而易见了。
我们需要一下几个角色:一是大地图背景,二是隐形的小地图,三是玩家显示的样子的角色,四是玩家的隐形小碰撞箱。
然后
我们就来创建这几个角色:
玩家样子和地图样子是给玩家看的;而玩家碰撞和地图侦测则是隐形的小地图,负责碰撞
接着
我们来定一个缩小系数,如果你的地图小,缩小系数可以大一些,如果你的地图大,建议缩小系数小一些,只要让碰撞都能在舞台区进行都行.
这里我把缩小系数设为了0.2,具体该怎么设还要看你创作的情况
通常我会在“玩家碰撞”这一角色中完成设置,你也可以在其他角色中设置。
由于缩小系数是一个常量,一般来说都不会去调整,所以我在变量名前加上了“#”,表示常量。tips:变量名通常不影响效果,但会影响代码的解读性。
好的,缩小系数已经设置了,接下来我们来绘画一下我们的场景。
在地图样子角色中绘画
我就这么画了,当然,一个地图还需要一个碰撞箱,也就是隐形小地图。
什么?你不会画隐形小地图?没有关系,我来手把手教你。
把地图复制下来
来到地图侦测角色
把复制过来的地图,粘贴到地图侦测这个角色里面
把它变成空心的
加粗轮廓
好了,我们这样就画完了,当然,这个隐形小地图到底该怎么画还是要看看你的实际情况来决定,总之,不碰撞的地方是空心的,要碰撞的地方是要保留的。
玩家碰撞也是一样,接下来我们就来画一下:
来到玩家样子角色,把造型复制下来
把造型粘贴到玩家碰撞里
画出一个比玩家样子小的矩形,但别小太多
为什么要比玩家样子小且为矩形呢?
答案是:方便创作。
比玩家样子小可以保证碰撞时不会出现问题,而矩形则是因为复杂造型碰撞会卡顿,当然,你也可以画出一个圆形出来。
删除后面的玩家样子
这样,玩家侦测就画好了
你不要问我为什么画这么丑,因为隐形小地图不用给玩家看,如果你的作品有需要,你也可以进行美化一下,要按实际情况来画。
接下来
我们来到地图样子角色中
我这里将大小设为300(大小多大得按你的实际情况决定),但是,可以看到,就算我设置了大小=300,但是大小却是273,这是因为Scratch编辑器有舞台区限制,你可以使用费米扩展,但我习惯用另一种方法。
创建一个空的造型,这个造型什么都不用画,空着就行了。
这个方法就是先换成空造型再设置大小,然后再切会来,这样就可以突破Scratch的大小限制(如图所示)。
好了,我们来到地图侦测角色
来到地图侦测角色
上代码!
然后,地图侦测的代码就到这里结束了,嗯,对,你没有听错。
接着
我们来到玩家侦测角色
来到玩家侦测角色
上代码!
tips:如果你有什么地方不懂或不了解为什么这么做,可以先去本文章第一段文字仔细地再看一下,实在不行可以选择到评论区问。
好的,我们把出生点坐标设置了,接下来我们来移动。
上代码!
tips:为什么要这么制作呢?首先,我把:(“按键d是否按下”-“按键a是否按下”)*移动速度,你肯定不知道这是什么意思,给不懂的人讲一下,Scratch有个特性,布尔值积木放某些返回值积木中,会返回1和0,1就是ture,0就是false,如果我们按下d键,a键没有按下,那么:(1-0)*3,这个结果=3,所以我们的x会+3,若d键没按,a键按下,则:(0-1)*3,这个结果=-3,所以我们的x坐标就会-3,实在不懂也没关系,可以用你熟悉的方法来实现移动。
OK,接下来我们来做做碰撞:
创建名为“碰撞”的普通自制积木
上代码!
当然,这只是碰撞侦测的其中一种方法,你也可以使用你自己的方法。这里用的方法的原理就是:碰到之后回到原来的位置。
上代码!
tips:记得创建图中出现的四个公有变量!
不好意思,我在做教程的时候忘记加上了图中圈起来的代码,你记得加上啊!
不好意思,我在做教程的时候忘记加上了图中圈起来的代码,你记得加上啊!
OK
接下来我们来到玩家样子角色
来到玩家样子角色
上代码!
如何做出摄像头跟随的效果?首先,摄像头肯定是有延迟的,所以玩家x-摄像头x就可得出摄像头延迟了多少,让玩家移到这个位置,就可以制作出摄像头跟随的效果。
好的
我们再来到地图样子角色
来到地图样子角色
上代码!
很好
这样的话应该是不存在bug的,除非你代码拼错了,或者编辑器出了些小问题,不过相信你能经过不断地努力,制作出一个大地图作品。