Scratch 之 大地图引擎怎么做?

引子

        简单的介绍一下,一些游戏引擎是有一个隐形小地图存在的,这个隐形小地图通常用来侦测碰碰撞和移动。那么,一个大地图引擎的背景肯定是很大的(一般来说大小都超过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的,除非你代码拼错了,或者编辑器出了些小问题,不过相信你能经过不断地努力,制作出一个大地图作品。

猜你喜欢

转载自blog.csdn.net/leyang0910/article/details/132032513