有小伙伴说上次的三 d 迷宫不够刺激,那今天来做这一款, 话不多说,这就开始!第一步,三维场景,首先准备好坐标投影相关函数,根据坐标投影绘制三角形,以三角形为基础绘制出面和立方体。 接着我们设置人物位置,根据鼠标修改视角方向,画个场景测试一下哦。 第二步,生成迷宫,用数组存储迷宫地图,从一点向四周随机开辟道路,计算迷宫每个点到人物的距离并排序,按从远到近的顺序把墙壁绘制出来,迷宫地图这步就有了 哇!第三步,角色移动,根据方向键修改人物坐标,并限制移动范围。游戏这就开发好了,还有什么想看的,欢迎评论区留言,记得点赞关注哦!
粉丝3455获赞1.7万

粉丝发来他做的迷宫游戏,说想加点沉浸感,这就安排上。第一步,生成迷宫,打开一个新代码,出示话术组,存储迷宫地图,从一个位置不断向四周搜索未到过的点,并使其连通,随后调用生成函数, 接着便利迷宫数组计算 x y 坐标,移动过去后绘制随机游戏地图,这就有了。第二步,立体效果,设置透视参数与墙体高度,画一个四边有明暗变化的正方形来渲染墙体计算机坐标以及透视缩放。 第三步,加入人物,导入一个内置的素材, 监听键盘事件,若按下方向键且未碰到墙体则移动。这就做好了。还有什么想看的,欢迎评论区留言,这是开发中用到的缩影移动函数和扩展。

scratch 基础入门教程第十八期,今天来做一个大地图的迷宫,同时还可以召唤出小地图视频,最后会告诉你如何获得一个迷宫地图。创建角色的时候选择用上传的方式把我们这个事先准备好的迷宫地图上传。作为一个角色,先把坐标位置临时调成零零。 这个迷宫地图非常优秀,因为它是 svg 格式的,比较便于我们进行修改编辑。选中它之后,去除它的白色背景底色,调整它的大小,让它刚好能够铺满我们的舞台。调的过程中不仅要调大小,还要注意调整它的中心点。 画一个红色的小方块作为我们在迷宫当中的人物,大小呢设置在二十到三十之间大概就可以了。再给小方块点上两只眼睛,因为默认造型都是朝向九十度方向的,所以呢把两个眼睛点在右侧。现在迷宫呢,我还没有 放大,只是一个标准大小,所以我先把这个人物也缩小一点大小,收成五十,把它放到迷宫当中。如果只是像现在这样让他在舞台大小的迷宫上游走,我们其实很容易把它做出来, 直接利用以前的关于移动的知识就可以了。最简单的方式,按下箭头按键之后,调整相应的方向,移动三步,侦测一下,如果碰到了迷宫这个角色的话,倒退三步,同样的代码复制出来几份,只改按键的方向以及对应的面向方向就可以了。 有了这样一段代码,就可以让我们的小方块在现在的桌面迷宫上自由的移动起来。但是我们今天要搞的是大地图的迷宫,不是这个效果。如何实现大地图效果,这是一个哲学问题,概括起来就是世界因我而动。先把 方块角色的大小调整回正常的一百,然后给他改个名字,叫做大人物。既然是大地图迷宫,那就先把迷宫的尺寸调大,大小直接设置为三百, 然后我们就发现 scratch 把它强制改回到一百六,因为 scratch 对一个角色的大小是有限制的,完全不慌, 绘制一个新的造型,这个造型什么都不用加,就是空白的。然后这个时候调成大小三百,再把造型切回刚才的迷宫造型,现在你发现这个迷宫真的可以停留在三百的大小了,这招就叫做李代陶江 刚才说过了,大地球的精髓就是世界因我而动,那么我们的大人物这个角色就再也不用动了,他不需要任何的移动代码了,而是把这些移动代码全部放到大迷宫地图的身上。 为了代码更简洁,我们做一个自制积木,名字就叫移动,接收的参数是方向。把刚才的移动代码给他复制过来,把方向填入到面向的积木块里,剩下的部分不用动, 这样一个移动的字的积木就做好了。但是要注意一个方向上的细节,当大人物想要向左移动的时候,我们让他面向负九十度方向,但现在我们是人物不动,让地图反向移动,所以按下左键,面向的应该是九十度,不再是负九十度了。 也就是说人物不动,地图整个反过来动就 ok 了。就按照这样的方式,把四个方向按键的代码都给他改出来,回到我们的大人物角色,把他所有移动的部分都删除掉,但是保留改变方向啊,我们仍然是需要他转头的,把大人物的初始位置放置到零零,也就是 舞台中央。如果你注意观察,就会发现,很多游戏里人物其实始终保留在你屏幕的中央,比如玩王者荣耀的时候,你的英雄始终是在屏幕中央的,不信你可以试一试, 哪怕他移动到了地图的边缘,他也仍然是保持在屏幕的中央。而这个时候,地图的边缘会出现很多装饰用的沟壑啊,树木啊,峡谷啊,来填充这个空白的区域,但人物始终是在中央的。 我现在调整了大地图的初始位置,把他拖拽了,让人物处在大地图的左下角,以这个时候的位置作为他的初始位置。现在让我们持续的动起来吧,四个方向键都给他测一下, 显然这里发现有点不太对劲的地方了,这个迷宫在变形。为什么这个代码执行的结果跟预想的不一样呢?走进科学能讲三级,我就 一句话,把它的旋转方式设置成不可旋转,再次来验证一下,没有问题,不变形了。但是新的 bug 又出现了,它怎么就穿墙了呢?查 bug 嘛,就是一个原则, 严格哪咸处格,哪酸是哪就找哪。跟穿墙相关的是这个碰撞侦测,因为是复制过来的,我们忘了把它修改成对应的东西了。本来要撞的是迷宫,现在呢,要撞的是这个大人物角色。再次验证,终于没什么问题了,他可以很自如的在这个大迷宫里游走,但是呢, 整个外围有很多空旷的区域,这就是刚才提到那个问题了,我们的角色始终保持在舞台的中央,但他总会接触到你地图的边缘,这个时候外侧的空白区域就需要用一些东西来进行装饰了。就像王者荣耀里边,他的地图边缘你会看到很多的树木 沟壑作为他整个边缘的装饰。这里呢,我也不种树了,我也不挖沟了,我就放一个灰色的边框在造型里边,整个把四周全都给他围起来覆盖住,这样当走到迷宫地图边缘的时候,不至于让他漏气。 ok, 现在大地图的功能就完成了,他的基本原理呢,就是角色不动地图动。这里的地图不一定非得是迷宫啊,可以是任意其他形式的地图,那原理是一样的。 接下来让我们来实现全局的小地图,毕竟现在看这个大地图呢,你只能看到局部,没有办法给自己规划路线。 先把大人物角色复制一下,复制出来的新角色叫做小人物。把迷宫角色也复制一下,新的角色叫做小迷宫。小迷宫的代码就没有这么复杂呢,所有运动的部分全部删除,他的初始位置呢,也不再是这个巨大的数字了, 而是放在舞台中央,坐标零零,它的大小呢,设置为正常大小一百。你要说想把这小地图放在左上角,而且更小一些也是 ok 的,自己调一个喜欢的位置,把大小调到更小一些就行了。只是后边呢,可能要注意调整比例。 先手动临时把大地图和大人物隐藏一下,单独展示小地图和小人物,我们发现他的大小不是一百,被强制修改成了九十二啊,还是那个 scratch 限制大小的问题。没关系,只需要把这个小地图角色里边他造型中这些装饰的标给他去掉,他就应该可以正常显示一百了, 反正对他来说这些修饰是没有什么意义的。再来看一下小人物角色,他的代码呢,因为是复制过来的,也是多余的,都给他清理掉,他甚至连这个初始位置都不需要,待会会有别的办法来给他展示位置的。但是很重要的一点呢,是要设置他的 大小设置成三十三,因为大地图大小是三百,小地图是一百,他们之间呢是三倍的关系。那大人物和小人物之间也应该是这样的关系,大人物是一百,那么小人物呢,就是接近三十三点三三三。 接下来试着用空格来控制小地图的显示和隐藏,那么他在一开始绿奇之后就应该是隐藏的状态,按下空格再显示,再按再隐藏,再按再显示。那实现这个功能,我需要建立一个变量,就叫小地图显示 缩水值设为零。当按下空格的时候呢,我们要做一个判断,如果当前小地图显示的曲值就是零,说明他现在没有显示,而我按下了空格,那就需要显示了,所以这个时候把它显示出来, 而否则的情况里就应该是隐藏。同时当我要显示它的时候呢,我要记得同步的把它的值设置为小 系统显示等于一相反的,当你要隐藏它的时候呢,把它的值设为零,这样就可以通过空格键循环往复的控制它的显示和隐藏了。除此之外,我们还需要分别发送两个消息,小迷宫显示和小迷宫隐藏,以此呢来通知其他的角色配合这个动作。 首先就是我们这个小人物角色,他跟我们这个小迷宫是一对搭档,小迷宫显示的时候他就跟着显示,小迷宫隐藏的时候他就跟着隐藏, 而大人物角色刚好是反过来的,小迷宫显示的时候他要隐藏,小迷宫隐藏的时候他反而要显示。当然还要注意一点,在初始化的时候预期一点,他要先显示出来, 相反的,小人物这头立齐一点,先隐藏自己。至于大迷宫角色,那就完全跟大人物是一致的了,小地图显示的时候他隐藏,小地图隐藏的时候他显 是,而绿曲点击的时候呢,优先显示大地图,现在来启动验证一下,大地图切换小地图,哎,整个切换自如。还剩下一个关键问题就是小人物在小地图当中的位置呢,并没有跟大人物在大地图当中的位置对应起来, 这里就需要一点数学知识了,我们先抛开舞台不谈,只看我们这个大人物在大地图当中,小人物在小地图当中, 假设就以各自的地图中心作为原点,那么大人物和小人物在地图里各自是有一个属于自己的坐标的,而且他们两者之间的坐标应该是存在着一定的关系的,那就是三倍关系。 因为刚才我们这个大地图设置的就是三百的大小,而小地图呢,是标准的一百大小。再来看舞台的影响,我们的小地图跟舞台的 中心是重合的,所以实际上小人物在小地图当中的坐标呢,跟他在舞台当中的坐标是一致的。 那么既然大人物小人物之间各自的这个地图有一个三倍的坐标关系,那我只需要求出大人物他在大地图里边的这个相对坐标,自然而然的就能够求出我们小地图里边这个小人物的舞台坐标了。 关键是怎么求呢?同样还是需要进入舞台来帮个忙。我们是知道大人物呢,他是固定在舞台中央不变的,他的舞台坐标永远是零零, 而我们这个大地图呢,他是要不断的移动的,现在我给出他的六百五,四百六十六呢,是他初始的位置。那根据这两个 舞台坐标,其实我们已经能够看出来了,只要一座叉就能够得到这个大人物在大地图当中的相对坐标了,负六百五,负四百六十六, 当然了,这个值肯定不是固定的吧,因为虽然人物不动永远零零,但是这个大地图是要一直移动的,所以这里呢,其实对应的应该是他的 s 坐标和 y 坐标,而不是一个固定值,那么他的计算公式也就有了, 零减去大迷宫的 x 坐标,零减去大迷宫的 y 坐标,这样就能得到这个大人物。哎,他本身相对于这个大地图,他的坐标是多少了?那我们最终要求的 是小人物在舞台上的坐标还要再除一个三,这就是我们最终想要的坐标计算公式了。有了推导出来的公式,就可以一葫芦画 把代码写出来了,小人物只需要在每次显示之前移动到这个计算出来的坐标就可以了。此时此刻,这个小人物在小地图上就好像是高危生物做出的一个投影一样,说不定我们每个人也都是一个投影而已。再次进行验证。 现在当我们切换小地图的时候呢,就能够看到小人物已经可以同步去显示在大地图上移动之后的位置变化了。 但是细心的我又发现了新的 bug, 就是小人物的方向没有跟随改变。但是这个好办了,在显示之前让他面向大人物角色所朝向的方向就可以了,修改之后继续验证, 现在小人物也能够正确的调整方向了。我们的代码看似已经很完美了,但是在制造 bug 这件事情上,我绝对是专业的。 在小地图模式下,我坚持按方向键强制他移动。哎,我们看小地图上并没有发生什么变化,但是我们再去回到大地图的时候,发现 bug 又出现了,明明在大地图的时候他是不能穿墙的,怎么在小地图的时候动了一下就穿了墙呢? 皮裤套棉裤?他必定有缘故,因为我们大地图一旦隐藏了之后,就不能再触发那个碰撞侦测了。 所以这里为了保险起见,我要在移动的时候加一个限制,如果当前是小地图显示的状态,那就不要执行移动操作了。有的同学说,我就想让他在小地图的时候也能移动。 ok, 这个科学问题肯定是有解的,那你来解决 一下吧。最后揭秘一下从哪来获得这个迷宫生成器。有一个网址呢,是 l d d go 点 net, 它里边提供了很多小工具,其中就包括在线迷宫生成器。它的优点在于你可以选择生成 svg 格式的迷宫地图。这个对于我们做 scratch 是非常有帮助的,便于自己进行一些调整。 而且它可以生成多种多样不同形式的迷宫,有圆形的,三角形的,六边形的,蜂窝型的,当然也有最常见的长方形的。想要做迷宫相关的东西,但是又不知道怎么获得迷宫的,可以试试这个网站。

好,上一节课我们已经把游戏里面的迷宫和迷宫里面的宝物都做好了,而且我还能一个一个去吃了,但是简单的这么吃太没难度了呀。所以呢,我们要制造一些所宝物的怪物啊,让他在这里巡逻。好,我们来做怪物。 呃,怪物的话你可以选择啊,这里末影的一些动物啊,或者一些难看的,你觉得像个怪物的啊,像个熊的,你觉得哪个好看就用哪一个。呃,我就。那我就去上传一个我比较喜欢的一些 gif 的图片啊,你可以找一些 gif 的图片, 我们用这只黑色的小狗吧,他像个恶魔一样。好,我们给他改个名字叫怪物。好,这只怪物好像有点大啊, 有点大,我们把它的大小调整一下,尽量小一点就可以了。我想想啊,大小,看看它有多小,四十吧。嗯,四十有点太小了,五十 好,差不多五十之后呢,我们就把它固定在这里吧,让它在这里走吧。好,固定在这里呢,我们先把它位置固定好, 这时候记得把游戏暂停啊,再拿这个移动到 x y 出来,他才会在这个位置。好,在这里之后呢,因为他要移动的,我们又把那一个旋转方式设为左右翻转拿出来。好,这就是战死他的一个基础属性啊,还有一个基础属性,因为他 要往左,他到底是往左走还是往上走还是往下走?好,我们给他一个初始的方向。嗯,我们给他个面向多少度?好,我们把一些地方换一换啊, 我们把这个移动到放下来,后面我会告介绍。你们这里有什么用啊?这里面向多少度?移动到什么位置?好,我们把这些基础属性写好了,这样子的话他就只有一个任务,就是不停的走路。好,我们来让他走起来, 我们另外建一个自然段啊,方便我们后面有些事情要处理的。好,移动我们重复执行,让他移动, 例如移动两步。好,这里呢,我想后面可能, 呃,速度会变化的,所以呢,我们另外做一个总控。啊,这里呢?呃,这个总控呢?他随便要一个角色就可以了,例如啊,我选个苹果吧,这个苹果我给他改个名字叫总控。 这个总控里面其实也没什么啊,他平时不需要出来,他一直就隐身就可以了,他只是有一些小代码需要,需要他负责管理一下。例如什么呢?因为我希望后面的这个速度会变,所以我把这个速度写在这边, 我们来写这个叫做怪物速度。好,我们一开始把怪物速度设为多少啊?怪物速度设为二。好,这样子呢,怪物这里移动呢,就不是移动两步了,我们直接把这个怪物 速度拿进来。好,我们来看看现在的情况。哎,他跑了,往右边跑了。好,一是方向错了,第二, 第二还有什么问题呢?一个他不动,一个呢,他还能穿墙。好,一个一个问题来解决。好,我们先把它解穿墙的问题先解决了。啊,不对,先把他的方向先处理了,因为这个是这条 走走廊上面的,所以呢,我们需要他的方向往往下吧,往下往上都可以。好,第二个问题就是他的撞到这个墙怎么办?那肯定是 拐弯呢,所以呢,我们给他一个如果,那么控制里面如果什么,当然是侦测。碰到这个蓝色的墙啊,我们把这个颜色抽 取一下。好,蓝色,我们碰到蓝色怎么办?最简单的,你撞墙了会怎么办?当然是左转或者右转,一百八十度,这个左转右转都可以啊,一百八十度他就完全拐弯了。好,我们就把这一个放进来, 我们来看看现在的效果。好哎,他能撞墙,而且并且能回去了,哎,从上面也能回来了,但是他这个死板啊,不好看。我们调整一下这个移开, 我们把他的每走一步,我们让他换一个造型。好,我们来看看现在的效果。哎呀,他走的很慢,但是腿走的很快,这如果你不介意也无所谓啊,我觉得这样子太 难看了。所以呢,我把这个事情稍微分开一下,这个下一个造型我不放在这里了,我们重新建一个绿棋,被启动的时候,我们让他重复执行这个动作呢,下一个造型我们隔个零点一秒。 好,我们来看看这样子,我把动作和走路分开,看看效果怎么样。好,这样子呢,看起来呢,我这个动作就比较协调一点,好歹我走的不是非常快啊,他还是能走的 好。现在呢,怪物能走了,我也能吃了,但是呢,他并没有好好的守护着这一个钻石,因为你看他喷我没用啊,所以呢,这里面呢啊,就需要加 一个东西啊,我们把一个碰撞,那怪物的碰撞啊,我们把它写在怪物这边,例如我们 让他,他其实也只有一个事情,而且也只能撞我一次。呃,我在调试的时候出现过一个问题啊,所以呢,这里多余的写一个东西,在开始之后我们先等待,利用等待两秒之后再开始重复的问,重复的问,问什么呢? 如果你碰到了,你碰到了我们的猫大哥,是吧?你碰到我们的猫大哥,我就啊说一句,公公告一句广播,广播消息,我抓到 到猫大哥了,好,我们写这个,抓到猫大哥,猫大哥呢?呃,做一个小小的死亡动画吧,我们来看一下,因为这边告诉你抓到你了,那我这边就是当收到 我抓到猫大哥,就是猫大哥被抓了,那我们做一个。呃,动画,就是啊的一声啊,我们来试一下,我们发个声音啊,我们来录一个吧, 录制,哎呀,好,我们截取后面这一段。 哎呀哎呀,好,我们就要这一个吧,被抓了。好,被抓到的时候 后呢,我们就喊一句被抓了,哎呀,然后呢?我们,呃,变大变小一下啊,我们为了方便我们不移动啊,这时候呢,我被抓了,那我就先停止全部脚本,不是停止啊,里面记得选择一下 停几停止该角色的其他脚本,就是把这一些走路什么的全给我停掉,我们只做这一个部分啊,然后呢,我们让他重复执行十次,每次放大 放大十,放大十之后呢,我们再让它缩小。 护士,好,我们现在先让他这样子,我们来看看现在的效果。好,我们去被他撞一下,被他抓一下看看。 哦,他在无限增大。好,知道这个无限增大是什么问题吗?其实在这里我们的怪物不停的 就是说我碰到猫大哥之后呢,其实上他是在不停的发这个广播,对吧?但是呢,实际上我只需要他发这个广播发一次就够了,所以发完这个广播之后我们加一个 停止,不是全部脚本啊,是停止这一个脚本,就是说把这块积木给他废掉,停止这里的操作,不管这里了。好,我们来再来试一试, 那我们就再去抓这只怪物。哎,为什么变成我去抓怪物了?哎呀哎呀,好,你看我们喊一句,哎呀,然后呢? 变大变小,然后我就动不了了,我就结束了,这是一个我玩这个游戏的失败条件啊,这就做好了。好,那这节课就讲到这里。

好,我们今天呢,在第二节课基础上再来学习一下这个小猫准备用的第三节课 接下来我们要做什么啊?有同学会记得第一节课有介绍过我们要接下来要做什么?碰到黑线,他要返回到原点,对不对?还有什么?这里有一个终点对不对?碰到终点我要做过关了,是不是这样子?好,我们先来解决。碰到黑线, 有个同学想一想,碰到黑线怎么办?又从语言上说什么碰到黑线就怎么样啊,同样的也是怨什么, 如果那么碰到黑线,好,先不急着放进去啊。碰到,如果碰到黑线,我们养成这种语言习惯,如果碰到黑线,我们就可以是碰到 颜色啊,碰到颜色,什么颜色呢?这个灯出去要从这里去选黑色,注意 不要去按照这种方式去选择,因为黑色他有,随着他的亮度等级不同,他是不一样的。那怎么办呢?这有个吸取颜色啊,吸取,我们比如说 看到没有,我们这有一个中心点,将你的中心点,我现在在这里是白色,我把它套在上面变黑的。好,这个颜色是对的,看到没有,好,那碰到黑色要执行什么啊?要把这句话复制下来,先把它断开,回到这个点,嗯, 回到这个点,那有的时候那老师我回去了,我能不能显示,就像你拖拖到终点一样,显示一状况呢?可以,也是一样, 在这里说一句话,不要着急,马上开始吧。说一句话说什么呢?说碰线啦,别说碰线啦,好,说个两秒就休息两秒或者一秒,你们自己判断自己考虑啊,把它放进去啊,一样的重复啊, 我们看一下效果好上好,我们就就故意去碰一下啊, 碰线了啊。好,那这里有的同学就说,老师你这个猫没有动作,我们之前的猫有动作, 那其实这个东西很容易去设置,大家应该都懂的,我们分开,这分开进行命令组设置,这边是专门负责运动的跟判断事物的,甚至于把判断事物分开也可以,这是根据你们自己的习惯哈, 那我们可以怎么样?这边再来一个什么专门来控制外形的,这同学应该是很熟练的,下一个造型对不对?我们为了你看太疯狂了是不是? 对啊,大家上课的同学知道太疯狂了,我们可以怎么样设定一个时间,比如说零点二五啊,或怎么样,这你们自己去决定好,这样子走起来就比较自然了啊。好,那我们现在来设置这个终点,一样的终点,我们也可以用绘制的方法绘制一个角色出来。绘制, 那我们不写自然好,就直接用,比如说画一个方框,红色大红,好,那我们不要变框镜,可以直接中间线出来了,先不去考虑他大小啊,如果你要写文字,就直接在这里添加,注意要把 颜色修改一下,比如说文字改成其他颜色,添加什么终点好,类似这样子,我们这样这里不去对他进行设置,因为你这里还要字体的大小,还叫设置字号什么之类,我们去研究啊,就这样的好,好,比如说我们这设置好了, 那么我们把它位置拖到类接近的位置,我们的这个终点没有发生其他的 变化,硬度都没有,只是一个等于类似于终点线一样就放在那边,那我们怎么样就不需要对他进行太多的东西,就设置一下大小,比如说五十,我们看一下会不会太小。 好,有人说老师字,哎,这不是我们今天研究的啊,我们以后会说到字怎么样去慢慢修改它,比如说好放这个,那么我们 再回到猫想一想,再回到猫的代码中,想一想怎么样,这个秘密应该怎么设置? 看看黑碰到线画回啊,很很快了,但是我可以把它进行一个复制,我不是碰到线了,我不要碰到颜色,就跟类似于之前捉鱼一样,是碰到啊,碰到什么?碰到, 这终点名字叫做角色二啊,你们名字也可以改的,后期我们也会加了,那就里头的命运要改了,就不是移回去了,而是说什么 过关啦,过关啦,好,说完以后怎么样结束这个游戏?大家控制中 有一个怎么结束左右角落好再把它放进去,让我们取巧的方法来尝试一下,你这个是否正确 过关了啊?没了。好,那我们今天这个小猫准备一个最基本的内容,就教学到这里,大家可以怎么样回去把它自己 做一下,分享给其他朋友去玩。那这里呢?学有余力的,我一直在强调,学有余力的同学,你不要停留在老师讲的这个基础上,你可以对他进行提高。可以提高什么内容呢? 老师的这边也有一定的研究。提高什么内容呢?比如说 说一个最简单的,我这里装一块火板,什么叫火板呢?我去装一条木板,可以这样左右左右的翻转。那你猫走到这里时候怎么样?当他翻到这边的时候,这里的时候你是过不去的,他翻到这里的时候你可迅速 过去。这,这就叫什么?添加关卡或者说什么呀?你会把这上下的移动,你必须趁他下来的瞬间给我通过,这叫做什么?添加火把。第二个我们可以怎么样 添加这边打游戏啊,我们可以设置一定的寿命,我不能说我碰到线我就回去再来,碰到线我就回去再来,这没意义了是吧?我比如说我这有个生命值,我有三次生命,我碰到一次线回去,我生命值十 恶类属于这样子的。那还可以怎么样?还可以,我做第二个,第三个关键迷宫图不一样, 是迷宫图不一样,我们可以怎么样?过关了,我的生命只加一个,我跳到另外一幅图,是不是?哎,有的同学就会想到了,怎么样?我除了做那个活动的关键不让我过,我也可以注意些什么 啊?奖励性的东西。好,这就留给大家去研究,去思考,我们会在捉啊小猫找迷宫二这个内容中去向大家展示。

给同学介绍一个迷宫程序,程序开始的时候,角色在迷宫中央能见范围有限,我们可以通过方向键去控制人物上下左右的去移动, 但是因为有黑幕阻挡,所以我们并不清楚前方的路是否是正确的出路。 这时我们可以点击一下开灯,然后通过全区地图可以看到角色大概在哪个方位,然后我们需要尽可能记住正确的路径,如果后面又忘记了,可以再点开灯。开灯的次数共有三次,超过第三次开灯按钮就消失了。 好,这次顺利找到出口程序部分程序一共是有六个角色 地图有两个,一个是实际用到的大地图和一个开灯后显示的全区地图,还有人物角色和黑幕开灯次数按钮以及全区地图中代表角色位置的标记。大地图的程序并不复杂, 主要是要通过一个造型进行过渡来实现地图变大的要求。 人物角色并不会动,而是利用地图角色通过偏移变量移动来反衬出人物角色的移动。而人物角色仅仅是控制方向,判断是否越界和碰墙和对偏移变量的修改以控制地图的移动, 还要不停的换造型以实现走路的效果。 对于黑幕和全局图以及开灯按钮这样一些角色的程序并不复杂,只要逻辑关系捋顺就可以了。而在地图上,人物角色的位置将通过一个系数来去推断出在全区地图中代表角色标记的坐标位置。 如果想试着做做程序,需要参考可以在评论局里喊声,我需要程序熊老师将尽快分享,记得点赞关注哦!

想出去,门都没有,你还挺厉害。删除小猫,进入角色库,找到钥匙,再进入角色库,找到小女孩。上传迷宫图, 一个是没有出口的,一个是有出口的,点击代码我们调整角色,把小女孩改成十, 把它放到这里,点击钥匙大小是四十,零是冲上的,把它放到这,添加声音,添加小女孩取得钥匙的声音, 点击小女孩,添加小女孩走出迷宫的声音。点击代码 创建变量叫做钥匙位置,点击确定,接下来抽象点击钥匙,点击事件拖拽当前滤镜点击点击运动 拖拽面向改成零,冲上钥匙可以旋转,改成将任意旋转,点击外观拖拽,将大小设为改成四十, 然后换成这个没有出口的迷宫图,钥匙是显示的,点击运动拖拽移到 x y, 这个是左上角的位置,然后把钥匙放到右上角,这个是右上角的位置,叫二号位置, 然后这是三号位置, 四号位置我们先搁在这,点击小女孩给小女孩处指画, 点击运动拖拽,面向拖拽移到 x y, 点击外观拖拽,换成造型,换成这个 a 造型,也就站直的这个造型,然后小女孩也是显示的。 接下来便写游戏逻辑,点击钥匙,点击变量拖拽,将钥匙位置设成一到四,随机 点击控制拖拽,如果纳莫,点击运算拖拽等于点击变量拖拽,钥匙位置等于一的话,也就是左上角。把左上角的位置放进来复制 如果是二的话也就是右上角,然后复制这两个, 如果是三的话也就是右下角,如果是四的话,也就是左下角。 那么钥匙位置固定之后就是等待小女孩去取钥匙了,点击控制拖拽一个,等待,点击侦测拖拽,第一个改成碰到小女孩,然后取到钥匙的话,播放取得钥匙的声音, 同时的话钥匙要滑行到舞台的中央,然后钥匙开始旋转,点击外观,钥匙开始变大, 让它停留零点二秒,然后重复执行它,改成六次,然后再停留零点二秒,钥匙呢就隐藏了, 我们的这个迷宫图呢,就换成有出口的迷宫图,钥匙的程序就编辑完了,点击小女孩,先让小女孩走路广播消息,发送一个走路消息, 点击确定小女孩接受这个走路消息,那点击控制拖拽,如果那末点击侦测拖拽,摁下上键, 然后点击运动拖拽,面向面向的是上,也就是零,然后拖拽移动步数,移动十步, 如果我们不控制的话,那么小女孩就能够越过这个迷宫墙,那么这个游戏就不是走迷宫了,就变成了这个穿墙的游戏了,所以我们要做限制,点击控制拖拽一个,如果那末就是小女孩往上走之后, 我们要判断,点击侦测,然后拖着一个碰到颜色,点击这个颜色,点击这个吸管,吸这个迷宫墙的颜色, 就是看他有没有碰到迷宫墙,碰到迷宫墙的话点击运动,再让他退回来,前面加一个减号,也就是负十就可以了,然后呢小女孩再做出走路的姿势, 好了,我们按下方向上键,走路的这个程序就编写完了,我们右键复制给它改成往下走一百八十,然后再复制 这是向左走负九十,然后再复制 改成向右走正九十,然后整个的话重复执行 走路的程序就编写完了,我们再点击事件拖拽,当绿漆被点击,点击控制拖拽一个等待, 然后点击侦测拖拽,第一个改成碰到钥匙,当小女孩碰到钥匙的时候,我们点击控制,小女孩就不能动了, 改成这个该角色的其他脚本,然后我们让小女孩停留两秒钟的时间等待这个迷宫换成有出口的这个图之后的话,小女孩继续走在广播消息,广播走路, 然后我们点击控制拖拽一个等待,等待的就是小女孩走出这个迷宫,我们点击运算拖拽一个小于,点击运动拖拽一个 y 坐标, 然后小于多少的话,我们把小女孩呢给他挪到这个出口的这个位置,然后呢面向呢是下,我们看一下, 好,当他的外坐标比这个负的一百七十五还小的时候,也就证明他走出了这个迷宫, 那么走出迷宫的话,小女孩还是不能动了,所以拖出来一个停止注意,还是改成该角色的其他脚本,然后点击外观,小女孩就隐藏,然后点击声音 播放这个走出迷宫的声音,游戏结束了,点击运行,看下效果, 是不是很简单,小朋友们快去试试吧。

嗨,屏幕前的寻光探险家们,我是你们的露露老师。今天我们要深入神秘的黑漆漆大迷宫,带大家制作一款非常有氛围感的探险小游戏,黑暗追光者。 拿好你们的手电筒,我们出发,点亮黑暗。首先瞧瞧我们的发光探险家开始游戏,他在起点站好并落下画笔,准备留下七彩发光的轨迹。在后台,计时器正偷偷数秒,要是迷路了,按空格键就能瞬间传送回起点,重新开始。 为了防穿墙,老师写了碰撞退回算法,只要他敢撞墙,立刻反向退回二像素,一旦撞到终点,就会发出问广播宣告通关。 接着是光晕,他的电量每秒流失,视野越缩越小。别怕,空格可一键充满电,通关时他还会自动移到最底层。 好了,今天的黑暗迷宫生存秘籍就传授完毕了,小程序员们快开动脑筋去设计专属于你们的黑夜大迷宫吧!我是露露老师,我们下期再见了,拜拜!

surprise 编程一百例第三期今天来做一个 pok 上的小游戏,名字叫做 mates, 我给他翻译成迷宫光痕。我用按键或者是鼠标可以控制这个光球在迷宫里边移动,但是他的移动很有意思,看现在这个位置有三个方向可以走,我只按一下。 刷刷刷刷刷,他一直在往下走,直到再出现岔路口的时候,他才停下来,除了岔路口呢,哎,走入死胡同的时候呢,他也会停下来,也就是你按一次呢,他就会自己去岔路,你就往前走,直到出现岔路或者是死胡。 好的,迷宫光痕难度系数,三颗星,现在我们来制作它。先来看怎么获得一个迷宫,这是我常用的一个迷宫生成器,它的地址呢是 l d d go 点 net 使用的时候呢,这里可以选形状,今天我们就要矩形就 ok 了,格式一定要选成 s v g, 这样在 scratch 里边会很容易修改。今天的 宽度和高度我分别设置成十六和十二,这个是什么含义呢?十六和十二其实代表了这个迷宫里边方格的数量。哎,你没听错,这个迷宫啊,都是以方格为基础来生成的。你现在看到的这个动图呢,就是一个逐渐生成迷宫的过程。 ok, 我现在在我的 success 里上传一个我已经下载好的迷宫, 这就是我选择的宽度十六,高度十二。先给他调整个位置,放到零零,然后造型我需要去修改一下, 要改的内容不多啊,就是选中这个白色的底色给他去掉。这就是我说你要选 svg 格式的好处了。现在看上去呢,他有一点歪了啊,是因为中心点啊,有点错位,微调一下之后,嗯,现在舒服多了。 看一下他的大小啊,四百八十三乘三百六十三,其实就是四百八乘三百六啊,这个三啊是他的边缘线占的一个宽度,那么我们刚才说了,他这个宽度是十六个方格,而现在呢,他尺寸呢,是四百八,说明一个方格刚好就是三十像素的边长, 这一点呢,也可以验证一下。我把背景切成 skrt 自带的这个三十像素的网格,你看一下,刚好能够严丝合缝的对上。 ok, 回到刚才我们迷宫的这个造型,做一点小的调整,我需要把这个 进出口都给他毒死啊,这个游戏里我们不需要进口和出口,回到这个游戏里边来,最关键的是这个光球角色了,他处在迷宫之中需要移动,那么再次发动我的感性认知编程打法。 我们再来看一下原来的游戏效果,当我按下一次之后,他会持续的移动,直到我们说出现岔路口或者是死路的时候才会停止。 那我这就有一个模糊的印象了啊,其实他在自动移动的这个过程中呢,就是走一步,我就要去探测一下当前是一个什么情况啊?是只有一条路往前可以走了,还是说我只能走回头路了, 遇到守护痛,还是说我现在处在一个叉路口,三叉或者四叉的路口,那么回到 scratch 里来,我们说,其实 在 surprise 里,你用造型加上一个真测,是能解决一半以上的问题的。想象一下,上次我们的地雷游戏啊,就是用到了这个造型进行探测,今天我估计重施一下,来打造一个探真造型,我先把这个球复制过来,所谓 位的探针呢,其实也简单,就是画一根短线段,但是长度呢,会超过我们的这个 光球的半径,哎,让他再稍微长一点,嗯,光球的半径我们能看到啊,我设置的是二十六乘二十六,因为整个迷宫的方格是三十,我希望他不要超过方格。而探针呢, 他的特点是什么呢?注意,我需要让他的中心点刚好处在这个圆球的中心上,圆心上啊,而他的探针呢,是要超过半径的,保证他是能够碰到迷宫的这个紧挨的墙壁的啊,包括他旋转别的方向也一样,我向下到一百八 啊,他也是可以碰到墙壁的,紧挨着的墙壁都可以被触碰到。这里要注意一点,我们的这个探针不能太细了,太细的话碰到侦测是没有结果的。 ok, 再给大家切回到光球的造型,现在我们可以开始编码了,就利用这个探针的特性来完成探测工作。做一个自制积木选上,运行时不刷新,这一点很重要。 外观上来就得先贴成探针造型啊,切换之后才能进行探测。这里我需要建立一个列表,叫做可走方向,用来记录哪些方向是可以走的。 在每次的使用之前,我都得把这个列表先清空,然后重复执行四次,因为我们就四个方向,要探测嘛, 要探测的内容也不复杂,就是看能不能碰到我们的迷宫。如果我没有碰到迷宫,哎,那就说明当前这个路是走的通的,这个方向是走的通的,那么我需要把这个方向 记录到我的列表里边去,把它加入喝酒方向列表。那每次探测呢,都是需要旋转九十度的,探测完就转九十度,探测完就转九十度,这样四次之后呢,刚好是转了三百六十度,也就是一圈,他还会回到他最初的方向。 检测完成之后,一定要记得把它这个造型要给它切回来啊,之所以要选择运行时不刷新,也是为了让中间过程呢,你是看不到的,你会始终认为它都是一个光球的形态。好,现在呢,我们把它调整到一个合适的位置, 负十五,然后七十五啊,七十五是 ok 的。好,这是一个方格的,正中心的位置就在这个位置上。我们现在目测呢,是有两个方向可以走的,一个是九十,负九十零和一百八呢,都应该是走不了的。他现在呢,我们 看他是一百八十度的方向,我来验证一下。检测, ok, 探测成功啊,九十和负九十是可走的,剩下两个方向没有被加入列表。接下来探测既然成功了,那他其实就应该做一个自动移动, 建立一个自动移动的姿势。题目,它的内容呢,就是根据我这个探测的结果来决定我要往哪里走。 如果说我们现在就像现在这样啊,假设啊,这个球本来是从左边向右走的啊,他原本的放朝向是九十,哎, 原来是从这个位置向右移动过来的,桥下是九十度,那当他走到这个位置的时候,他要进行一次探测,探测结果也摆在这了,他只有两个方向可走,一个是继续前进,一个呢是他来的时候的这个回头路的方向,这种情况呢,他就 是可以走的。而如果处在三岔路口,四岔路口,也就是说有三到四个方向可以走,那他就应该是不能移动了。哎,比如说放在这走到这种位置的话,他就不应该再移动了,或者呢他被放入了死胡同, 哎,在这种位置,这个时候,如果你去探测的话,他应该是只有一个方向可走的,也就是这个回头路方向,这都是不能走的。那知道了,如果我现在这个列表里边我的项目数啊,他等于二, 那就说明能走,这个时候可以走,其他的情况呢,都是不能走的,那能走。接下来的问题就是两个方向往哪个方向走?两个方向有一个是来的时候的方向,那我就得判断一下了, 我从第一项开始判断啊,如果这个第一项他就是来的时候的方向,那不能 走回头路,所以就得倒回去,就得往另一个方向走了。好,怎么判断这个方向一到底是不是回头路呢?有方法啊,我们来做个叉,用这个方向一,跟我们当前所处的这个方向, 当前所处的方向,他们俩做叉,然后取绝对值,如果这个绝对值等于一百八, 那就说明我们列表里的这个方向一啊,他代表的是一个回头路的方向,那么我就不走他了,我就得走另一个方向,也就是方向二啊,如果他不等于一百八啊,说明他不是回头路方向啊,那我就直接走他就 ok 了。 方向确定了,那就直接开始移动啊,我想让效果更好一点,所以我要分五次移动, 一次呢,我让他移动六步,因为我们一格刚好是三十嘛,把它放进来好探测有了,自动移动有了,那我们可以做一个简单的测试, 先做一个探测,再做一个自动移动,这两个动作应该是要不断的循环往复的,所以套一个重复直行。那做这个测试呢,我得给他找一个合适的位置来做啊, 比如说我先给他放到这个位置来吧,他的坐标应该是负四十五和七十五啊,这个一定要卡在正方形的中心点上才行啊, 先给他移到这个位置来,然后呢,我现在就测试他,我让他向右走啊,原始呢是向右走,所以其实你能看到我们是先做一个普通的这种手动控制的移动动作,然后接 上从不执行,看他能不能触发持续移动。那现在来试一下, ok, 我们看他移动了好几步,直接到这个三岔路口的时候停下来了。 那么如果我现在继续让他向上走,呃,或者说啊,向右吧,继续向右吧,继续向右走的话,先不管这个处是位置的,就在当前位置继续向右,按照我们的推算,他应该自己向左转,走入这个死胡同,然后停下来,我们再来看一下, 哎,这就是我们想要的效果,看来这个核心问题我们都解决掉了啊,能探测能够自动移动,但是还是要注意一个问题啊,我们这还没完成呢, 自动移动之后呢,这还有一个否则的情况,当然他肯定是不需要自己再去移动了。但是这个时候我们需要注意一件事情,整个移动过程是既有手动也有自动, 所以我还需要当他不再移动的时候呢,要切换到手动模式,那这里我来设置一个变量,行动中, 当我的行动中是零的时候,说明我是需要进入手动模式的,而他等于一的时候呢,我想让他进入自动模式,所以把这挪一下这里做一个判断, 如果我的行动中等于一,我就应该进入到自动模式,而当我这边自动模式走不下去了,我这里只需要把行动中设为零,就能把这个分支强制进入到,否则的分支也就是我们手动移动的这个分支里来。那么手动移动的分支 再建立一个知识题目,就叫手动控制。手动控制的内容应该是什么呢? 就是用方向键来控制吗?如果我按下了,比如说向右吧,按下向右键,那这个时候还要考虑一个问题,不是说你随便按了,按了就能走的。我这里要有一个限制啊,就是你向右的方向得是允许你移动的, 也就是说我这个可走列表里边是包含这个九十度的,这两个条件同时满足啊,我允许你走九十度,而且我按下了右键,要走九十度,我才能让你去走这个九十度, 也就是向右的方向。那怎么走呢?也可以按照重复执行五次,每次移动六步的方式来让他完成这个移动的过程。同时别忘了我也要去调整这个行动中啊,把它设置一,因为你走完之后啊,就应该进入到我们的这个智 动一动的接续过程了,所以应该是这种形式的。那其他的三个方向呢?也是以此类推。这样的模式啊,再复制三次啊,放到下面来,不过我不太希望有这么多啊,永长重复的代码,这里边差别不是很大,唯一的差别呢,就是他要调整面向九十度,而其他的是面向其他的角度。 所以我再来一个自制题目,叫做手动移动,接受一个方向参数, 那么这一部分就可以换成这样的形式了,我这里清理一下。好的,手动控制的内容呢,其实就变得简单了,只需要把这个手动移动给它填进去啊, 你现在是向右,那这块参数就是九十。好,我们还有三个方向,把它们复制一下,如果是向左,这里就应该 是判断负九十,那参数也应该是负九十。然后为了保险起见呀,避免他出现这种同时按一下互相干扰的情况。给他加一个停止这个脚本啊,让他按完之后呢,就不要再去接收其他的按键消息了。 向上调成零度,那参数也是零度,然后向下是一百八,这里变成一百八,参数也是一百八。这个手动控制的部分呢,就应该放入我们这个,否则分子里去,把它挪过来, 套入到重复执行里去。律奇给他加上,但是我要给他选一个初始位置,先把这些都隐藏。初始位置,现在这个位置也不错,就放在这吧,这是他的初始位置, 然后电量也要初始化,现在默认的是没有移动的手动控制状态,所以行动中应该是零。同时我应该先做一次探测。哎,我要知道当前哪些位置是可以走的。好了,现在我们来直接运行一下 向下可以哎,向左可以,向上正常在岔路口也停住了,向右再次停住,进入死胡同不再走了,都符合我们的要求了。那这个看起来有点寡淡啊,因为我们这个既没有这个光痕的这个效果,也没有出现我们这个方向球的指示, 那需要再来做一点提示的工作,把方向球让他显示出来,可以在光球里边,当他停止的时候啊,我们这个自动移动停止的时候,他就应该出现光球了。 我来广播一个消息,名字呢就叫光球显方向球显示,好利用这个方这个方向球显示的消息让方向球呢显示出来啊,他呢可以做一点准备工作。点击率之后呢,首先他得是隐藏的状态, 默认是不应该出来的,然后我重复执行三次,最开始呢先让他面向九十度的方向重复执行三次,每次要克隆自己,然后再来一个右转九十度, 哎,为什么是三次呢?我们这个四个方向应该有四个球啊,哎,多出来的一个呢,是本体自己来干活了,三个克隆体加一个本体,当他接收到了我们刚才说的这个方向球显示消息之后呢,他应该要做一个判断,每一个球都去做判断啊,如果他 他自己的这个方向啊,是被包含在可走方向里边的,包含了他当前的方向,说明呢,他是可以被显示的。那怎么显示呢?也简单就移到我们这个光球的位置上去,然后呢, 快速的移动一个三十步,注意这里我们已经不需要设置方向了,因为他本来就带着方向,三十步之后我们把它显示出来,哎,让他移到最前面来显示, ok, 就是这样了,回到光球这边我们来试一下 啊,有个小问题,在一开始的时候啊,也应该让他显示出来,所以应该再多广播一次这个消息。在探测之后啊,就广播一次,因为探测之后呢,才会有这个方向的列表数据。好,现在我们再来看一下,哎,能看到是有这个方向球的,我们先手动移动一下 啊,还会继续出现方向球。好,现在要把隐藏的工作做好了,显示是没问题了,但是隐藏没有,那隐藏呢,我们也应该给他搞一个开始移动, 当我们这个光球开始移动之后呢,他就直接隐藏,那这个开始移动的消息由谁来发出呢?在我们手动控制之后啊,就可以把它发出来了,哎,我们的手动移动 哦,在这手动移动之后,我们把这个广播消息发出来,这里应该是开始移动,再来试一次, 好的,移动功能就没有了,停下来的时候呢,将会出现, ok, 这就是我们想要的效果啊,还没完这个方向球呢,他还有一个功能啊,当他被点击的时候呢,他 应该是可以驱动这个光球的移动的,所以呢,我们同样还是通过广播消息的方式吧,光球移动只有一个消息呢,其实不太够,我还需要补一个变量, 因为光球还不知道自己要往什么方向移动呢,所以呢需要补一个移动方向的变量,这个移动方向变量呢, 就把我当前这只方向球他自己的方向填进去。光球这一边呢,我就接收这个光球移动的这么一个消息,那他把自己的方向就按照手动移动的方式把参数填进去就行了,把这个移动方向作为一个参数填进去。 好,我们再来试一下。这次不按按键了啊,我用点击的方式,哎,不太对,不太对,有 点问题,怎么是向上走的呢?难道我方向填错了?我来看一下啊,我来看一下。移动方向设为方向,这是用参数获取的,这个是不可能错的呀,那这是什么情况呢? 从代码上看好像不应该有问题啊。接收消息之后,调用手动移动,填入的是移动方向,然后这边方向球利用的是它默认的参数。 好吧,那我只能开始一起再调一下这个 bug 了,我们更多的让它显示信息。 当点击之后呢啊,我利用这个外观吧,把这个方向呢让他说出来啊,我看看他到底是什么情况啊。果然还真是零度啊,那说明呢, 方球的移动没问题啊,因为我们传的参数是错的,所以他移动方向是反的。那为什么这块会是零度呢?这个有点奇怪啊。嗯,尽量的暴露信息吧,尽量的暴露信息,现在是零,那他肯定不对,那我再移动一下看看 哦,现在这个好像是正常的,也就是说我移动一下之后呢,他是没问题的,那最开始的时候是不对的,现在只有一个球显示叫合理,但是他显示的东西不对,那么我来建一个测试用的这个消息据调测试啊, 接收到这个消息之后呢,我要把所有的球都显示出来,重新执行一下。所有的球都显示出来,看看他们到底什么情况。 广播的消息只有一个球,哦,重叠了,重叠了,这些球都在一起了, 怪不得所有球都在一起了,那这就不对了,你看再次广播测试,只有九十的球没有被干扰到,其他的球都重叠在一起了,重叠在一起,难道是因为这个方向球显示有问题吗?我再来试一次, 并没有问题啊,并没有问题啊,只有这个 一百八会正常的留在位置上啊,去到他该去的位置,剩下都没有动,说明方向球显示的逻辑是没问题的啊,这段代码是没有问题的,那就是说只在启动的时候有问题啊,那这个这个应该就跟 执行的顺序有关了,让我们来看一下。绿奇点击的时候,方向球就是做了一个克隆,没有其他的,克隆完之后都在等这个消息啊。方向球显示的消息,我看一下光球这边,他发的方向球显示在最开始的时候,绿奇 执行完探测,然后就广播了,这里是对的,因为要探测完才能广播,才有这个方向的列表数据。 那,那我知道了,这边的从不执行可能还没有结束呢,这边的方向球显示的消息就已经过来了,如果是这样的话呢,就会导致后边产生的克隆体, 他们不能够正常接收这个信息,所以他们没有调整自己该调整的位置,做一个验证吧,如果是我敲响的那样,我把 把这里调成停止其他脚本,那再次执行之后就会发现产生的克隆体可能加上本体啊,不够四个,我们看一下是不是这个情况。哎,怎么一个也看不到,用测试详细来验证一下 啊,果然只有两个,只有两个,第一个和第二个,剩下的都没有产生就被打断了啊,那这个猜想是正确的, ok, 那就好办了,这部分代码是没问题的。然后这个测试我就先不要了,这个点击也给他调整回来。 明白了,就是执行顺序的问题,他要优先执行才能保证是合理的。所以呢,我把这边做一个广播吧,开始游戏。 ok, 由他来触发光球的移动啊,光球这边呢?不要捋起了啊, 他要接收一下,接收一下,开始游戏啊,开始游戏,不是开始移动,开始游戏, ok, 如果这样的话,哎,这次就对了啊,这次就对了,这就是一个典型的执行顺序的问题, 我们可以借助用广播消息的方式,让更多的信息暴露出来来进行判断。 ok, 那这些控制都没问题啦,我现在需要给他加上一个光痕的特效。这个其实很简单, 如果你之前做过贪吃蛇就会知道,我们可以利用这个克隆体的残留的方式来实现这个效果。 进来之后点击率齐,他肯定是一个隐藏的状态了,然后他需要重复执行,移到我们的这个,哎,我们的光球位置上去啊,其实不隐藏是不是也可 可以啊,直就让他一直移动就好了,让他显示出来,因为如果不克隆的话,其实也只有他自己看上去效果也是 ok 的,但是他应该要把自己放入到最后面,不然他会遮挡。 ok, 用这样的方式,那他当他作为克隆体启动的时候 也没什么特别的。嗯,就是不断的执行,让自己快速的变得透明一些, 把他的透明特效啊虚像特效吧就是虚像特效增加五。那这些动作做完之后呢就删除自己这个克隆体。关键是他什么时候开始做克隆。 刚才我们已经有一个消息了,就是开始移动的消息啊,当接收到开始移动消息他就应该开始克隆了,他应该是重复不断的克隆的,但是 也不是一直到无穷远啊他也有一个判定条件当这个行动中这个变量刚才我们定义的这个变量还挺有用的如果行动中变量变成零了也就是他停止移动了那他就不应该再去克隆了, 在这之前整个过程中他都可以克隆。那让我们来试一下啊这是他现在的位置 ok 能看出一个光痕的效果哎但是这个虚相效果怎么没有出来啊。哦 sorry 这里错了,这是设定了。哎我自己也出现了这样的比物啊,很多人给我反馈的 bug 其实到最后都是这种比物 bug 啊真的。 这里应该是增加啊增加五很多人都是这种比物的 bug 啊,真的很无聊。嗯来再试一次。 哎这次能看出一个残影的效果了,看到了吗? ok 好像这个时间啊有点短,让他多保留一会把这个特效变成增加三 哎这样蚕影能够保持的时间长一点。哎好像有一点小问题啊我怎么感觉他这个蚕影少了一块。发现了吗? 看我现在在这个位置哦他的第一个位置是没有产生餐饮的啊这不对,我们看一下什么情况啊 接收到消息立刻开始克隆自己这个应该没问题我们看一下消息的发送。消息的发送呢,是在我们做完这个手动 控制之后,开始手动移动的时候,手动移动结束了,广播的消息。啊,那明白了,把它的位置往上调,调到移动之前啊,正式的移动之前让他来就产生残影,再来看一下, 更不对了,直接没了,哎,这什么情况?我们再来看一下,消息正常发了,这个没问题。那这边接收到消息之后呢,开始,哦,明白了,他的判断条件是行动中等于零,但是呢,在我们广播消息的时候呢, 当前状态行动中本来就等于零,是移动完才换成一的,如果上来就等于零,他接收到的同时立刻做判断,这里直接就判断成要停止重复执行了,所以压根就没有直 过去。那这个好办,我把它复制一下,我用行动中等于一先做一次循环啊,重复执行,直到行动中等于一,然后呢,如果这个循环结束了,再做行动中重复执行等于零, 来看一下, ok, 出水的位置呢,也能看到残影了,我们放在这来验证会很明显,没错,是这样的,这次就是正确的了。现在就只差一个问题了,我需要做一个游戏成功的判定 目标球。他的逻辑倒是也简单,哎,点击利息之后呢,他也不用动啊,那他就还在他现在这个位置吧。哦,这,这是他现在的位置,然后他需要做的一件事情呢, 就是等待,我要判断他到我这个光球的距离 是小于一个一指的小于二吧,为什么要这么射呢?为什么不用碰到呢? 因为如果用碰到的话,这边光球他的移动过程啊,是分步移动的,那可能他俩还没重合呢,他就已经提前判断到碰到了游戏就结束了,所以用距离来判断,可以让他们保持到一个重合的状态,停止全部脚本来试一下看看效果。 给他找一条路让他走过去,这个路能过去吗?这个迷宫啊,比他原版游戏的迷宫是差点意思的,因为这个迷宫呢,他的路线都比较短,我们刚才看的那个原版游戏里的迷宫,他做的都比较长,他可以一次走 很长的路,而我这个不行。哎,这就是问题存在。哎,出问题了,出问题了,为什么再次点击运气不能开始呢? 哦,明白了,还是执行顺序的问题,看这现在他们两个距离默认就是小样的,所以如果目标球的执行顺序在先的话,那他上来就会判定游戏已经结束了,那这个也好办, 再加一个等待。跟刚才那个光痕其实是异曲同工啊,我先确认我已经跟你分离了,我再开始做这个游戏结束的判断啊,这样肯定 ok, 你看是吧? ok 了, 好的,这就是我们的迷宫光痕。其实呢,今天这个游戏教程里边最有价 指的并不是怎么制作这个游戏,而是如何进行问题的排查。平时有很多人都在评论区或者是私信和群里边啊问我各种各样的 bug, 但是百分之九十的人,其实他们的 bug 就不是 bug, 只是在照视频操作的过程中 有手物。比如说刚才那个应该是增加特效,我选成了设为特效,还有的时候大家是增加距离改成了设为,或者是设为改成了增加, 这样的 bug 呢?都不叫 bug, 这都是抄错了。真正的 bug 呢,应该是你预想了一个结果,但是你考虑的不周全,执行完之后跟你预想的并不一样,你要对你的设计进行修正,这才是真正的 bug。 那查 bug 的方式呢? 按图所记,尽量的暴露更多的信息来增加你的判断。嗯,就是这样了, ok。
