粉丝8.9万获赞45.3万

复活了这个系列,上一次更新应该是,嗯,好多天前了。今天我们得到了新的素材,矜持长老,有普通攻击、踏地攻击、 激光攻击以及挨打特效。感兴趣的小伙伴可以先从猴网下载这些素材,自己来挑战,实现对应的功能。 侯老师的教程还要稍等等,如果你之前还没有做过这个系列,强烈推荐挑战一下。我们已经实现了人物移动地图、滚动无限地图、轻攻击 棍、劈棍、利棍、戳棍、敌人所敌敌人移动物空攻击以及血量条。这些功能代码很多,难度也比较大。当然了,有挑战性的任务才更有意思,也更有价值嘛,小伙伴们加油加油!

好的,大家打开侯老师编程网站。呃,搜搜我的作品黑神话悟空, 可能加载比较慢啊,我的作品目前赞也不多,在后面大家要往下翻一下。呃,我的网名叫做无敌真寂寞。哦,对,就是这个,打开我们来玩一下。 呃,加载要慢一点。 ok 啊,下面是游戏的一些简介,旁边是一个蓄力条, 我是一个二 a 的 游戏。 ok, 幽魂也出现了。好吧,幽魂的技能也是非常的非常的全灌花。 呃,壮观。蓄力一段。 呃,这个游戏目前还没有增加呃,伤害,所以目前是一个无敌版本。戳棍,哦,这个是普通攻击, 给大家。呃,看一下,看一下戳棍的三段蓄力, 我这个是重棍,重棍的三段蓄力, 中棍的二段蓄力戳棍,戳棍一段。给大家看一下戳棍的二段,二段和三段是一样的。 立棍,立棍一段,给大家看一下立棍二段, 哦,以后游戏通关后可以从这个小门里走掉。 ok, 没有了,大家可以去体验一下。

在这个教程中,我将跟大家一起编程,从零开始做一个塔防游戏。在这一集中,我们会首先实现塔防地图的惠子,并且让敌人先跑起来。 打开史古拉曲软件之后,首先把自带的小猫角色删除,然后呢我们去绘制我们塔防游戏里面的地图。 首先呢我们绘制一下地图里面呢这条逃跑的路线,我们首先选择直线工具,画出来一个大概的路线的趋势。然后呢我们选择变形这个工具, 把这条路线呢变成曲折的一个路线。这里呢我们介绍一下基本的用法。首先呢直线上的这些点是可以拖动的,你可以改变他的起死和结束的位置。然后这个变形工具呢,可以在上面增加一些点,增加这些点之后呢 可以拖动这个圆圈来改变他的位置以及他的弯曲度。好,那这个地方呢,我们每个人就按照自己的想法来设计一下自己塔防地图里面的路线。 好的,绘制完基本轮廓之后呢,我们把这个路线呢变得宽一点,我们通过调整轮廓里面的这个数值的大小,我们这里改成八十,太大了,八十 好,这个宽度呢,呃,差不多能够满足我们对路径的这个想象。然后呢这个颜色呢,我们给他改成啊土地一样的颜色, 好,大概 好没选中他之后再改变颜色啊,刚才在场土地一样的颜色 再深一点,好,差不多。然后呢我们把背景呢改成一个草地一样的绿色,当然自己啊,同学们也可以按照自己的想法呢来调整这个配色 轮廓不要了,然后填充改成绿色, 绿色绿。好,然后呢他把我们的路线给覆盖住了,所以我们要把它放在最后面。好,那这样呢,我们塔防游戏的这个背景呢,基本的配色呢就搭配好了。好,那接下来呢,我们来绘制我们的敌人啊,绘制一个小圆球 代表敌人。好打开,呃,会字,然后呢选择圆,这个时候呢你可以放大一点,然后按住 shift 这个按键呢,画一个正圆出来, 好调调整一下他的中心点。好,我们能看到呢,他这个大小呢还是比较大的啊,我们再把它缩小一点 啊,这个大小差不多。然后呢跟刚才一样,我们去调节一下他的这个颜色啊,给他一个轮廓的颜色, 然后呢打一点,好,填充呢换成另外一个颜色。 好,这个呢是我们第一个, 他的大小呢还稍微有点大,那除了在这里调节大小,大家在这里也是可以的,八十啊,这个大小呢就比较理想啊,这个刚开始的这段路呢,我们再让他变直一点, 我们这个功能做完之后呢,把它先保存一下,保存到电脑,给客群起一个名字,塔防游戏 part one 保存到电脑。接下来为了让我们的这个敌人改个名字, 能够沿着我们这条路线呢去行行进逃跑,我们需要绘制一个看不见的角色,让他能够啊沿 这个角色往前走,那我们呢在这里新自新建一个角色,他呢叫路线。好,那这个地方的路线呢,我们要画的跟这个一模一样,那这里呢我们有一个小技巧,我们到这个背景里面选中刚才的这个曲线,然后复制一下, 然后回到路线这个地方点一下粘贴,那么他就有了。然后呢这个地方呢,我们就不需要跟这个 路线呢,这个颜色呢一模一样,因为我们最终呢是要把它隐藏起来的,让敌人沿着这条隐藏的看不见的线进行移动。若为了保证这个在中间呢,我们这个线呢就要变得细一点,这个地方直接改成一, 然后呢为了能够看见这是黑色,是吧?我们让他呢再亮一点,我们直接改成白色,好,变成白色的一条线有点太细了,是吧?好,我们选中他稍微出一点, 测试阶段可以出一点。然后呢他刚开始复制出来的位置呢,没有在正中间,所以我们可以来一个,当滤芯被点击,我让他显示出来,并且移动到舞台的正中间,零零, 好,这样他就到舞台的正中间了,那我们的这个敌人怎么样沿着这条路线啊进行移动呢?我们可以通过给我们的敌人增加一个触角的方式来实现。好,老师呢先 绘制一下,待会呢我们再慢慢讲里面的原理,我们放大一下,绘制两个触角,然后呢这个就不要轮廓了,把颜色弄成一个,方便我们看得见的往这里画一下。好,然后呢再跟刚才一样,我们可以选择复制粘贴, 然后呢对称的来一个,我们现在假设的是我们的角色面朝右这个方向,面朝右改成另外一个颜色红色,让他们比较明显。那这个敌人呢,我们刚开始面朝右,我们首先来改变一下他的方向,让他面朝上, 面向上。好,然后呢给他一个初始的位置啊,保证这两个触角呢,在这条白色线的两侧 移到这个位置。好,那我们怎么样保证他可以沿着这条直线行进呢?我们只需要判断这个两个颜色呢,有没有碰见这个线就可以了, 如果左边的线左边的蓝色碰见了白色的线,说明呢他比较偏右了,我就让他往左再移动一点点就可以了,所以这个地方呢,我们增加一个重复执行。 然后呢,首先呢让他往前走移动几步,那为了这个步数方便控制呢,我们通过变量来实现,这样仅适用于这个角色就可以移动速度。然后呢,因为中间还有涉及到转弯,所以我们再来一个变量转弯。 好,一开始呢,我们把它设定成, 再来一个小影城,也是先通过设定成五摄试验一下。 有了这个之后呢,我们就可以放进去,在他移动的过程中,我们要去侦测一下他有没有碰见这个我们的路线,我们通过侦测里面有一个什么碰见什么,好,我们侦测一下这个触角的蓝色 有没有碰见我们直线的这个白色,这个白色不太正, 改成白色。好,如果他碰见了,因为是左边的触角,我们就让他往左移动一个角度,往左转个弯。好,同样复制一下,如果是红色碰见了 跑了怎么来回来,如果是红色碰见了,我们就让他往右偏一个角度。好,右转右转一个角度。来,我们测试一下。 好,我们发现呢,他已经能够沿着这条直线进行移动了,但是在这个地方呢,他跑出去了,那这个地方呢有两个原因,第一个呢是我们跑的太快了,转弯呢太小了, 或者说这个弯呢他的确太急了,所以我们啊在做的时候呢,要灵活调整一下这三个地方,比如说这个啊曲线呢,太太弯太急了,我可以把它调整一下,这个地方我们选择这个工具,把它稍微变缓和一点点。 好,但是呢你要记住我们这个地方改变的只是这个背景,这个路线白色的路线呢,还没有改动,所以呢一定要有两个地方都改动,往上拖一点点。 好,这样改动之后呢,这个弯看着就没有那么急了,我们再让他运行一下,同样的速度可以放缓一点,每次转弯稍微大一点点, 好看他能不能过去。好,顺利通过这个弯了,这个弯也有点急,哎,也顺利通过, 好的,顺利的到终点了啊,这个地方大家一定要注意,这里面填的数值跟你绘制的 这个塔防路线呢是直接相关的,所以呢大家一定要灵活的调整,不需要跟老师的一模一样。好,那 接下来呢,我们还遇到一个问题,我们最终的效果呢,是不希望他显示这条直线的,那如果我把它直接隐藏掉的话,那我们前面这个模块什么颜色,碰见什么颜色呢就不管用了,而且呢我们也不希望敌人前面一直显示这两个触角。好,那现在呢,我们讲另外一个更优化的方法, 我们用的方法呢是在这个造型里面。好,我们复制三个,我们把前面的触角呢每一个造型里面留一个 删除,删除,在这个地方删除,保留红色,然后真正的这个敌人呢没有触角, 那我们在判断的时候呢,首先他移动的时候呢,我给他转化成 造型三,一开始是造型三,让他开始移动之后换成造型一,这时候他是蓝色,换成造型一的一瞬间,我去判断他有没有碰见白色,哎,没有白色了, 我要给他改成,我待会要把它隐藏掉,啊,没有白色了,怎么办呢?我们在侦测里面有一个碰到什么东西,什么角色 路线,如果他碰见路线了,就让他转个弯,那这个地方也是一样。在判断之前呢,首先给他改成造型二, 然后判断一下他有没有碰见路线,如果碰见了,往右转,整个结束之后呢,换成造型三,因为这个判断和切换非常快,所以我们看着好像只有一个在走,我们能看到他已经在沿着这条直线进行移动了,对吧?那如果我们把它隐藏掉,哎,我们发 又不行了,对不对?这时候怎么办呢?我们要学习一个颜色的特效。在这个地方, 我们的这个路线呢,的确是让他显示出来的,但是我们可以把他的虚像设定成一百,这样的话我们就看不见他了,他虽然存在,但是看不见他。这时候我们再让敌人进行移动, 哎,我们发现虽然我们看不见那条路线,但是我们的敌人的确是沿着这条路线在逃跑。 接下来呢,我们把我们的敌人呢弄成多个敌人,我们通过克隆的方式来实现,只有一个敌人很容易就被我们打死了,所以我们在这个地方用重复执行 克隆,克隆自己的功能,让他克隆十个出来,每一次间隔一个时间啊,零点二间隔一个时间,那这个地方呢, 明显呢,我们就得改成当克隆体启动的时候,那因为克隆体呢和本体是两个逻辑,所以我们让本体一开始隐藏起来,让克隆体显示出来。好,来,我们抽烟一下, 好,我们会发现多个敌人就已经出现了,并且都在沿着我们的逃跑路线啊进行移动。 好,没问题。好,那这个克隆体呢,有一个小细节,因为我们的 surprise 限制每一个,每一个这个角色呢,最多只能有 三百个克隆体,而且克隆体越多会导致我们程序呢啊越来越慢,所以这个地方我们一定要记住,当克隆体不用的时候,及时的把它删除掉。所以这个地方呢,我们加一个判断,当克隆体启动的时候, 如果他碰到了,我去判断一下,如果他碰到了边缘,我就让 他删除自己。好,但是这个地方有一个小小的问题,一开始出现的时候就是碰见的这个地方,所以有些科隆体呢,可能会啊,有些同学做的时候呢,可能正好呢就没有东西出来,所以这个地方呢,我们加一个保险。 这个判断呢,一定要等到我克隆体出来之后,也就是当我发现他没有碰见边缘的时候,再去判断他下一次碰到边缘,把自己删掉,我们加一个等待, 加一个等待,等待他离开边缘,那没有离开边缘,我们就通过两个结合起来,等待他碰见舞台边缘不成立,也就是说他离开边缘了,再去判断他有没有下一次碰见边缘。来,我们测验一下, 好,顺利的生成了十个克隆体,克隆体沿着我们的路线进行逃跑,然后逃跑, 找到这种点之后呢,把自己通通都删除。好,这就是我们第一集的功能了,我们打好了一个坚实的基础,我们绘制了逃跑的路线,并且克隆传十个敌人,让他沿着路线进行逃跑。好,那下一集呢,我们再进行我们的炮台的绘制和攻击。 如果大家喜欢这个视频,请大家点赞收藏,我会及时的更新,谢谢大家!如果你在编程的过程中遇到了什么问题,也欢迎在评论区里面留言,我会及时的给你回复。

这是我们塔防游戏的第三集,在这一集中,我们将会实现让炮台跟踪每一个敌人并展开攻击。 很多同学都在催促老师赶紧更新第三集啊,首先呢非常开心啊,这个系列教程得到了这么多同学们的喜欢,那我们第三集之所以更新的比较慢,是因为这一集是我们整个系列教程中最难的一集。 为了实现跟踪每一个敌人这个功能,我们要对列表进行大量的操作,并且呢会运用到两个数学公式。 当然呢,大家也不用太担心,在第三集之后,我们的教程呢就会相对简单一点,所以大家一定要攻克第三关。好,那话不多说,我们现在开始编程, 为了实现让炮台能够监控每一个克隆体的功能,我们呢去给他单独的 建立一个积木,这个积木呢就是专门用来监控敌人并展开射击的,我们制作一个新的积木,给他起个名字叫 炮台监控与射击。好用这个名字好,那这个模块什么时候使用呢?我们让他在放下鼠标之后, 放下炮台之后,开始一直监控每一个敌人,那我们把这个地方呢稍微优化一下,我们用成如果,那么否则, 如果等于选中让他跟随鼠标进行移动,一旦放开了之后呢,他就应该不断的去监控敌人,然后呢展开设计好,这是一个大的框架,我们 为了实现能够监控每一个敌人呢,我们需要有一个变量,当我找到了我的目标敌人之后呢,我要对他进行展开攻击,所以我建立一个变量啊,仅次用于当前角色叫目标敌人的编号,目标敌人 编号,我要去找到这个克隆体里面,我要先攻击哪一个好?这呢电量很多,我们把其他的先隐藏一下,然后还有啊,敌人里面的这些 好,是保留一个我们新征的好。为了找到这个目标敌人的编号呢,我们就需要把列表里面所有的敌人编号都找一遍,对不对?那么就再来一个检查 敌人编号,我要把所有的敌人编号呢都检查一遍,看谁在我的攻击范围之内,并且离我最远,先攻击哪一个好? 这两个变量,那一开始的时候呢,先把这两个变量的初始化一下。目标敌人编号刚开始不知道是谁就设定成空,那检查敌人编号呢?我从一开始去啊,检查一二四零,待会呢,一开始检查的时候把它设定成一, 每一次我都应该把我们所有的克隆体都检查一遍,看看谁应该被攻击,对不对?所以我应该来一个重复执行去检查。重复执行几次呢?我们的这个 敌人编号有几个,我就去检查几次,我们需要在运算里面找到有一个, 在这里面有一个项目数好,敌人编号的项目数,它里面有几个,我就去重复执行,检查几次。每一次检查的这个敌人编号呢,我都给他增加一,那这样的话,第一次检查的是一,重复一下,第二次检查的是二 啊,这里有一个细节,就是我这个敌人编号呢,他是从一增加到二,增加到三啊,按依次顺序增加的,但是我这个克隆奇的编号呢?可不一定,因为有可能我把第一个先打死了,那下一次我列表里面 敌人编号里面纯的,那这第一个呢?不一定就是一了,所以我需要找到我检查的第一个他的编号到底是几,所以我们还是需要用一下敌人编号的第几项。我检查的敌人编号呢,是第几项把它放进去, 比如说这个编号现在是我们把它设定成一的话,那他检查了应该是第一个编号,如果我二现在存在一里面,检查就应该是二了。我们真正要检查的敌人编号呢,应该是里面存的这一个,所以呢我再建立一个变量, 检查敌人编号他真正的 id 是多少,我把它存一下,然后呢把它设定为 检查敌人真正的 id, 设定成敌人编号的一目标,像这样的话才能真正的去检查每一个敌人。 好,这里有一个小小的失误,这个应该是检查敌人编号。好,那有了这个敌人的编号呢,我们就要去测量一下到这个克隆体的距离了,那我们再建立 一个积木,它的作用呢就是计算一下到敌人的距离,好完成。好。那怎么样去计算一下到这个克隆体的距离是多少呢?可能我们会会很自然的想到 我们侦测里面有一个盗贼贼的距离,盗贼贼的距离,比如说选择敌人。啊,那在这个地方呢,我们不能用这个模块是,呃,原因是因为这个呢,只能检测出来我们炮台到 人体的这个距离,并不能测量出来到克隆体的距离,所以这个地方呢,需要我们自己呢运用数学公式来进行一下计算。 那应该怎么计算到敌人的这个距离呢,我们要通过每一个克隆体的 s 坐标,歪坐标我们已经存着了,对吧?通过这两个 坐标以及我们炮台的坐标展开一个计算,要用到一个数学公式。好,那我们先把它改一下,我需要呢给他添加两个输入项,这两个输入项呢就分别是敌人的 s 坐标和敌人的歪坐标, 敌人歪坐标。 好,有了这两个坐标呢,我们就可以配合炮台的 s 坐标歪坐标进行一人距离的这个计算了。那我们建立一个变量 紧身为单身角色到敌人的距离。 好,那到敌人的距离呢?我们把它设定一下,设定为这个地方呢,就需要用一下我们刚 刚才那个公式了,我们需要用一下减法,低音的 x 坐标减去炮台的 x 坐标, 然后他的平方我们直接复制一下,让他们两个相乘 放进去。放进去好,然后呢还需要再加上 歪坐标相减他们的平方,然后呢我们再复制一下。好,这个地方呢改成敌人歪坐标 减去,这也是歪坐标, 把他们 加在一起好,然后呢还需要有一个平方根的操作,在运算里面有一个平方根好把它放进去 啊,这是我们数学上怎么让球两个点之间距离的一个公式,如果你还没有学过的话呢,你可以啊,先根据我的这个模块呢把它拼出来啊。这些告诫我们一定要好好的学习数学,在游戏编程里面后面呢也会涉及到大量的数学,这样呢你的游戏才会非常的丝滑。 好,那接下来呢,我们就可以把这个新的模块呢运用到我们监测的这个模块里面去了, 把它拖出来去计算一下到敌人的距离。好,那这个地方应该填哪个东西呢?我们要去找一找检 他的这个敌人编号 id, 他到我们炮台的距离是多少?那首先要找到他的 s 坐标和歪坐标,我们找到我们的乘着敌人 s 坐标和歪坐标的这两个列表。啊,那这两个列表他的第几项呢?我们只要把敌人的编号放进去就可以了,我们找到 第几项?找到敌人 x 坐标的第几项呢?检查的敌人编号 id, 这一项就是他的 s 坐标,同样的我们复制一下,找到敌人的歪坐标的 编号 id 对应的这个值,这样的话他就能够把到敌人的距离给计算出来了。现在呢,我们已经能够通过这个新的模块计算出来每一个克隆体到炮台的距离。 那接下来我们就要去找一找,在这些敌人里面哪一个是我们要攻击的这个目标呢?我们呢有两个限制,我们先加一个判断, 通过一个判断去找一找到底哪一个目标是我们要攻击的。我们有两个条件,第一个条件呢是首先这个敌人呢得在我们攻击范围之内,对吧?所以呢我们来一个小雨,如果他到敌人的距离 小于我们的攻击范围,我们要找一个电量用来存一下攻击范围。好,那这个攻击范围呢,我们可以把它放在这个 攻击范围的角色里面,给他一个初始值,我们把它设定成一百吧。 好,那呃,如果我们发现这个敌人小于我们攻击范围的话,我们就可以对他们展开攻击了,但是呢有可能有好几个敌人都在我们攻击范围之内,我们先攻击哪一个呢? 我们的策略是先攻击离我们最远的那一个,先把跑的最快的这个即将跑出我们范围的这个干掉。那这个怎么去计算呢?这里就涉及到我们怎么从多个距离里面找到最远的那一个,涉及到一点一点点 断法的知识。那这个呃细节逻辑呢,老师就不在这里阐述了,大家可以啊,根据老师的代码呢,先理解一下。好,我们呢需要去找一下最远的距 离,这个变量呢还没有建立,我们创建一下 最远的敌人距离。 好,我们把每一个敌人进度都去跟他比较一下 敌人进度的这个编号对应的敌人进度。然后呢去跟他比较一下,看他是不是大于我们的最远的距离, 大于我们的到敌人的最远距离,不是这一个最远的敌人距离, 把这两个条件呢合并在一起,如果他满足这个条件的话呢,这可能是我们要攻击的目标敌人,我们先把这个最远距离 给他更新一下,将最远的敌人距离更新成我们正在检查的这么一个敌人编号,他对应的这个距离,并且呢把我们的目标敌人的编号,目标敌人的编号 也更新成我们正在检查的这个敌人编号 id。 这样的话呢,我们通过重复执行检查每一个敌人,我们就能够最终在这个重复执行结束之后找到我们的目标敌人编号。那我们来简单的测验一下这个功能是否管用。 好,我们呢让他一边监控呢,一边说出来他找到的那个敌人啊,目标敌人到底是谁?我们找一个说,每次讲 完了之后呢,都把这个目标敌人的编号呢说出来,目标敌人编号说出来, 来,我们运行把炮台赶紧往这一放好,一开始呢,他检测出来,一是他要攻击的目标,等到快走之后呢,他应该会再切换一下,我们再试验一下 一二,好,然后呢,哎,最后呢他又检测到九了,这是因为他不仅呢是要离距离最远,而且呢还要在我们攻击范围之内才可以。这个攻击范围呢,我们设定成了一百, 对吧?测定成了一百,这个一百的范围大概是这么大,我们可以通过调节这个造型呢,再去试验一下, 现在我们已经能够监控每一个敌人,并找到我们的啊目标攻击敌人了,但是呢有一个小小的问题是,这个炮台是不是并没有当敌人出现的时候,立马把它转向过来,并且随着敌人的移动进行跟进呀?那这个功能呢,我们现在来把它完善一下, 那这个呢,我们首先是等到所有的判断结束之后,我要去判断一下我有没有找到目标敌人,对不对?那我们这有一个目标敌人编号,如果他不是空的话,证明我们找到我们要攻击的这个敌人了,所以我们找一个 不成立,什么情况不成立呢?他等于空不成立等于等于目标敌人编号, 如果经过了这一番操作,他还是空,那就说明没找到,如果他等于空不成立,说明他找到要攻击的这个目标了, 那我们就要计算一下到这个目标敌人他的角度是多少,然后我让我的炮台扭转过去,那这一部分呢,要稍微复杂一点,他涉及到一些三角函数的知识,那这个知识呢,应该是要到 高一才会学习啊,所以呢,同学们可以根据我的模块呢,把它先做出来,以后等学到这一部分知识的时候呢,你再加深一下理解啊。那这个公式呢,我可以跟大家先展示一下。 因为敌人有可能在我们炮台的两侧,所以我们要分成两种情况,然后找到目标敌人的 x 坐标,敌人的 x 坐标的第目标敌人编号的这一项,如果他大于我们的炮台的 s 坐标 是一种情况,在这边是一种情况,在这边是一种情况。好,然后呢我们要去计算一下他的这个公式。我们找到运算里面有一个计算,有一个 a 碳, 让他们的 y 坐标相减除以 x 坐标相减,就是我们要的目标 减去歪,坐标去掉,然后呢复制一下,我们 x 坐标也相减, 然后把这两个数呢相除一下, 放进去, 放进去,最后算出来这个值呢,算一下他的 a 碳,鱼切,然后找出来他的角度,这个呢是我们计算出来的基础角度,然后呢要再根据他的位置呢做一些变化。我们有一个 相减的过程,我们让九十减去算出来的这个值就是我们要面向的方向了, 面向什么方向?把它放进去好,如果他在左边的话,我们还需要把角度呢,再调整一下好这个过程呢? 这个计算角度的过程,大家理解起来肯定是有问题的,这涉及到呃高于的一些三角函数的知识,大家可以先把它做出来,学到这个知识的时候呢,再把它深入的理解一下,也有助于你啊高中学习的这些数学知识的深入理解。 那我们来测验一下这个功能到底管不管用呢?点击绿奇,然后把炮台拖过来。 好,我们发现当这个敌人进入攻击范围的时候呢,我们的炮台的角度就发生了一个变化,他首先朝左边瞄住 号一,然后等到他一到这边的时候呢,他又转了过来,这说明我们这一部分的代码是没有问题的,然后我们就可以把我们测试的这个 这个模块呢把它去掉了。好,那接下来呢,我们就需要让我们的炮台展开真正的攻击, 在此之前呢,我们先把这些电量和列表呢,把它隐藏起来。 好,这有一个最远的距离,我们给他加一个保险,这个他计算的时候呢,我们让他先从最小的这个地方开始判断,这是一个小技巧啊,我们保证第一个也有可能被选上。负九九九九 勾选掉。文件保存到电脑保存一下, 塔防游戏二三保存 好,现在没有那么多干扰了,我们可以再测试一下全屏测试一下。 好,我们能看到随着敌人 的行走呢,我们的炮台也会发生对应的旋转,非常好。接下来就是要攻击他们了,为了实现攻击敌人,我们需要有一个变量来标志我们是否展开攻击。我们建立一个变量,仅适用于炮台是否攻击 好,那这个变量呢?一开始我们把它设定成 no, 你不能上来就攻击,对不对?一开始当克隆体出来的时候,我们不攻击。 no, 然后什么时候可以攻击呢?我们在这个地方,当我找到目标编号的时候,是不是就可以开始攻击了? 好,然后呢?在这个炮台监控与射击的下面,我们来判断一下,如果他是 yes 的话,我就去攻击他, 我们找一个判断,如果,然后等于 是否攻击,如果是否攻击等于 yes 的话,我就要去攻击他。这个攻击呢,我们其实就是要做两个操作,第一个呢是把他的敌人进度你不能再走了,直接把他更新成大的,再见 敌人进度的第目标敌人编号的这一项,我们把它这个改成这个大的,找到更新,将它 替换为将敌人进度的第目标敌人编号项替换为带的, 你没有进度了,你要死掉了。好,然后呢,我们稍微等待零点,呃,一会呢,再去进行下一次攻击, 零点八,零点七也可以。好,那更新成带了之后,这个敌人到底怎么样被攻击消失掉呢?我们需要在这个敌人这里呢,再来一个把他删除的这个地方优化一下。好,这里 以前呢,我们是碰见舞台边缘才把他删除掉,现在我们加一个,或者他在中间被打死,也是需要把他删掉的。这个呢就是我们敌人进度。 好,敌人进度的第 克隆编号,克隆体编号,如果我发现哪一个克隆体的编号的敌人进度变成了带的死掉了, 这种情况呢?我就把这个克隆体删除掉。 好,我们测验一下,看能不能把敌人攻击掉, 我发现他的确在转弯,但是敌人并没有消失,并没有被我们的并没有把自己三这个克隆体删除掉,我们检查一下为什么? 好,我们把他的,我们再检查检查有没有跟踪到目标敌人,应该是跟踪到了,因为他已经在转弯了,我们看这个是否攻击 有没有发生变化,有没有重弄,改成 yes。 好,的确改成 yes 了,但是呢并没有消失,也就是说我们问题出现在这个地方, 当他等于 yes 的时候,他把它更新成了戴戴,然后呢这个戴戴呢?他并没有把它删除掉, 并没有进到这一步啊,那有可能是因为我们敌人进度的这个列表呢,又被这里更新掉了,对吧?只能是这个原因啊,这里我们应该加一个只有当敌人进度的这个东西,不等于代代,我们才要更新他的坐标,正常我们就不应该更新了, 加一个判断,如果等于带的不成立, 我们才应该去把他删除掉。好,我们再试验一下, 这时我们发现哦没有转弯了, 这可能有一些细节我们要处理一下。当我们把某一个删掉之后呢,我们就需要把他的编号呢和这个坐标呢都更新一下,把这个坐标呢直接不要让他再更新了,你既然被删除了,就都是空。然后敌人的这个 这个编号呢,我们也把它删除掉,根据这个克隆体编号,我们把它在敌人编号里面的这个也给他删除掉,免得我们 判断的时候出现错误。我们找到这个编号,他对应的真正的这个 id 克隆体编号,比如说三他对应的编号是这个东西,然后呢把它删除掉,删除到敌人编号的这一项,好,这样子 我们再来测试一下,我们把炮弹拿出来,好,我们能发现这一次真的是监控到敌人之后呢,就把他给删除掉了,他从我们敌人编号里面呢也去除掉了。 好,最后呢从这里走的时候呢,敌人编号也就消失了。我们最后呢把这个炮台这里的这个说出是否攻击,改成说出目标敌人的编号 验证一下。好,我们再来一遍 说出来,好,一号三除,二号三除三号三除四号攻击,六号攻击,十号攻击。好,我们这样的话呢就把我们监控到的在我们攻击范围内的敌人都给干掉了。好, 到这里我们这一集的目标呢就已经实现了,我们的炮台能够跟进每一个敌人,并且呢找出来我们要攻击的目标敌人,并且把他干掉。 但是这个攻击和敌人消失的这个特效呢,我们还没有做,只是让他突然把自己删除掉了。那接下来的 后面几集呢,我们会把这里面涉及到的一些细节把它完善一下,并且呢让啊我们的炮台有各种选择,让敌人有各种造型,总之呢是让游戏更加好玩一点。最难的部分我们已经在第三集完成了,第三集的确很难,大家一定要有耐心,根据老师的 代码呢,把它好好的整理一下。那这里呢我把代码呢稍微放大一点,大家可以就这一部分呢 查看一下,比对一下代码, 你可以暂停到某一部分去看一看是不是跟你的有什么不一样的地方。 好的,我们今天的教程就到这里了,我们下期再见。

在上一集中,我们实现了射击游戏的基本功能,包含英雄角色的移动,按下空格键发射子弹, 僵尸角色的不断出现以及向英雄角色进行攻击,被子弹打中之后生命减少,直到三次之后消失。 那这一次呢,我们做三个增强,第一个呢是给英雄角色一个新的武器,并且能够实现两种武器的切换。第二个呢是给我们的僵尸角色也增加一种啊,分类两种不同的僵尸呢交替出现。 第三个呢是,呃,让我们的僵尸如果把我们的英雄角色生命值耗完之后呢?游戏结束,然后我们从第一个功能开始, 首先给我们的英雄角色绘制另外一个造型, 好,我们给他绘制成机关枪的造型, 用画笔调细一点,颜色呢,设定成跟机关枪的颜色一样,或者呢稍微浅一点有所区分。把这个地方画一下 啊,这个呢可以再优化一下, 好,可以让他在枪杆子再长一点,放在最前面。好,这个呢跟普通的手 口腔呢就有所区分了,这个颜色呢,调节成跟它的颜色一样, 好保存一下。那如何实现这两种造型之间的切换呢?我们通过按下一键和二键来四键,这里增加一个判断条件, 如果按下数字一,我们就切换成 手枪的造型,我们给造型起一个名字,这个叫手枪。第二种造型叫加特林, 好,那这个地方呢,就切换成手相的造型,如果我按下的是数字二键,我就给他切换成加特林的造型。 数字二, 好,那一开始的时候呢,我们需要一个默认造型,手相造型来试一下。 二一,二一。好,那不同造型的这个武器他都有什么样的不同点呢?好,第一个呢,我们是希望他移动的啊,发出发射的速度是不一样的,如果是手枪,我希望他啊更快,移动的更快, 但是呃准确度更高,如果是机,呃加到零的话,移动的慢一些,然后呢间隔呢?更啊小一些,同时准确度没有那么高。 所以呢,我们就需要在子弹这个角色里面去判断一下当前是什么武器,那我们如果用呃角色呢,就不太容易在 子弹角色里面去识别出来,所以这个地方我们要优化一下,通过一个变量来实现叫武器。好,一开始呢,把武器设定成手枪, 然后换成 武器造型,这样实现的功能是一样的,也是换成手枪这个造型,我们把它放到宠物执行里面,这样呢,我们之后只要改变这个变量的值,他就会换成对应的造型,所以这个地方我们把武器设定成手枪, 按下二键把武器设定成加特林, 好保存一下,那在这个角色二里面我们就可以有所区分了, 我可以判断一下,如果 武器这个变量 等于手枪,我呢还是让他直接面朝正确的正常的这个 方向,如果他的武器是加特林,我就让他的准确度没有那么高,让他在原来这个方向的基础之上呢,加上一个随机值, 加上一个重复五到正五的随机值,然后把它的结果放到这个里面, 然后呢往下移动的这个速度呢,我们也做一个区分,依然是判断一下武器现在到底是什么类型啊?没有用的,删掉。 如果武器是手枪的话,我让他移动的快一点二十,如果是加特林的话呢,速度稍微慢一点。十, 好,保存一下,我们来测试一下。 好,现在是手枪,他是值得射击出去的,我们换成二好,能够看到他射出出的准确度是有所区分的,但是呢,对于机关枪来说,这个频率显然太慢了,我们 把这个频率呢再优化一下,按下空格键是我们发射子弹的代码,这个地方 方等待零点三秒,我们让他根据他不同的武器呢来做一个调整。如果武器是手枪的话,我们保持零点三秒的间隔, 手枪零点三秒的间隔,如果武器是加特林的话,我们就让他快一点,加特林只需要等待零点一秒。 好,测试一下,首先还是这个间隔换成二好,明显会变快一些, 好,保存,那这样我们对于英雄角色的增强呢就做完了。 好,现在我们来做对于僵 角色的增强,我们让他出现第二种形态。首先呢在造型里面复制一下,我们通过颜色来区分他不同的形态,我们把这个颜色给他改成另外一种颜色,你可以挑一个自己喜欢的颜色,这个地方我把它改成橙色。 好,第一个造型呢,我把它叫做普通僵尸。第二种造型,士兵僵尸。那最终呢,我们会再加一个啊,大 boss 的僵尸王,我们目前呢先添加这两种。 好,那这两种僵尸他啊如何间隔出现呢?我们通过随激素的功能来实现, 在一到四之间产生随机数呢,他就有四种可能,一,二,三, 三,四。当这个随机数等于一的时候,等于一的时候,我让他出现的是 士兵僵尸,其他的几种情况呢?都出现普通僵尸,这样的话,正常情况下呢是普通僵尸,在百分之二十五的情况下出现的是士兵僵尸啊,如果随激素等于一 好,测评一下他的造型, 好,这里呢我们也通过变量的方式来做新建一个变量,适用于当前角色叫僵尸类型。 我们呢如果是一的话,就把类型设定成士兵,如果是其他情况二三四的话呢,就把它设定成普通,然后呢当这个克隆体出来的时候,我们就可以给他做一些不同的处理了。如果 是普通僵尸的话, 来一个判断,如果僵尸类型等于普通,那他呢是三条命, 如果僵尸类型是士兵,那他就是六条命,好,他的生命值更多一些。同时这个地方呢,要切换一下他的造型,如果是普通的就是普通造 普通造型,如果是士兵就是士兵的造型,好,开在一起 好,那除了生命值的不一样呢,我们让两种不同类型的僵尸,他的移动速度也不一样,在移动速度这个地方呢,也做一个调整,好来一个判断,把没有用的呢给删掉。 如果是普通僵尸,我让他还是移动一步,如果是士兵的话,让他移动的稍微慢一点垫后。 好,我们来测试一下降温, 点击滤芯之后呢,首先出来一个橙色的士兵类型的,然后呢又出来一绿色的普通类型的僵尸。 这里我们按下空格键的时候呢,有一点卡顿,我们检查一下代码, 好是这个地方我们的子弹发射呢,应该是在按下空格键之后,所以呢是按下空格键之后, 要克隆一下子弹,并且判断一下当前是什么类型,从而等待不同的时间。我们再测验一下,好,换成二。好,没问题, 好,我们再添加一个新的功能,不同类型的武器呢,让他的伤害值也不一样。现在机关枪和手枪他的伤害呢都是一,我们把它改成,呃,机关枪呢是一,如果手枪直接打中的话,伤害是二,我们来验证一下, 新建一个伤害, 一开始默认武器是手枪,所以伤害呢设定成二,如果我切换成加特林的话,就需要把伤害呢设定成一, 如果再按回一的话,换成手枪这把伤害重新设定成二。好,那这个伤害变量应用在哪里呢?在我们的僵尸这个里面。 好,之前这个地方是如果碰见子弹的话,直接增加负一,我们把这个地方改成我们新建的伤害的变量 好,因为伤害呢是一个一和二的正数,我们需要通过乘以一个负一的方式把它变成一个负数伤害放到里面,这样的话,如果你的武器是手手枪的话,他的伤害呢就是二,如果是机关枪的话,就是一, 好,两下就把他打死了。一,二,好的, 那接下来我们来做英雄玩家的生命的概念, 首先呢,我们要通过一个新的角色来记录英雄角色他当前的生命值,我们可以在这个地方绘制一个爱心,也可以直接从角色库里面挑选,有一个很合适的角色叫 pat, 好,我们选择这个角色呢,他太大了,我们的造型里面呢,把不需要的删除,同时把原来的这个呢放小一点,选中 再放小一点。好,差不多好,这个呢代表他生命值只有一的时候,我们同时再做几个 其他的造型复制一下。然后呢把这个爱心也复复制和粘贴一下。 好,两条命的情况下,再复制一下,复制粘贴 三条命的造型。好,我们把其他的变量呢隐藏掉。 好,把爱心放在左上角。 好,如果还比较大的话,我们可以通过角色里面的大小呢来设定 保存一下。 好,我们通过一个变量呢来记录英雄玩家的生命值, 英雄 好,这个英雄的生命呢,一开始的时候我们把它设定成三,将英雄生命当地去被点击设定成三,然后呢我们这个 爱心的造型呢,就需要切换成生命等于三的情况,换成 三造型好,三颗星星,那随着我们的生命呢,因为碰到僵尸之后会发生变化,所以这个地方呢,我们要加一个宠物执行, 当我的生生命变量发生变化的时候,这个地方呢能够换成对应的造型。那如果我发现生命英英雄生命的变成零了, 就需要停止这个游戏了,所以我们加一个判断,如果 英雄生命小雨衣, 我就停止 全部脚本,停止这个游戏。那英雄生命怎么样减少呢?我们在 玩家里面添加一个侦测的事件,如果我们的英雄玩家碰到了僵尸,就需要把自己的生命值减一,所以加一个宠物执行的判断。如果碰到了 僵尸角色,也就是角色三,我们需要把他的变量生命增加负亿。 好,要加一个当你具备点击的事件,那如果只有这几行代码的话,他碰见这个英雄之后呢,血会迅速的减少到零,因为中间没有间隔,所以呢要加一个,等待一秒或者零点五秒都可以,给你逃离的时间,我们来测试一下。 好,如果我故意走过去,哎,能看到生命值减少了,状态太快了,我们离远一点,一次好两个三个,当他减少到零的时候呢,游戏就停止,就就停止了。 好,我们回顾一下今天我们助的增强,第一个呢是给我们的英雄玩家增加了切换武器的功能,从默认的手枪添加了一个加特林,可以通过按下数字一和 数据二进行切换。不同的武器呢有不同的特点,他们的发射间隔不一样,造成的伤害不一样,对应的角度和速度呢也不一样。 另外呢,对于僵尸角色我们增加了一个新的类型,在普通普通类型的基础之上增加了一个士兵的类型,不同的状态,他的造型不一样,生命值不一样,移动的速度也不一样。 然后呢,最后给我们的英雄玩家增加了生命的概念,如果我们的玩家碰到了僵尸,就需要把生命值减一,当生命值最终变成零的时候,游戏就结束了。接下来呢我们会给射击游戏引入成就体系,也就是我们会 增加金币的概念,当你击杀了不同的僵尸之后呢,会得到对应的金币,这些金币呢可以在商店里面去购买对应的技能, 那这一部分怎么实现呢?我们再下一次再讲。