卡卡编程网

专注编程技术分享,涵盖开发教程与实战案例

少儿编程网Scratch视频教程:塔防游戏(五)

欢迎来到scratch视频教程塔防游戏第五节。这一节中我们将让炮塔真正瞄准敌人,这将是整个系列中最复杂的部分。为了让塔瞄准和射击,我们在上一节中已经创建好了几个重要的列表,但如果它看起来太混乱,不要担心,因为一旦我们完成对炮塔的编码,游戏的其余部分将更容易制作。

·先把这些列表从舞台上隐藏,再切换到炮塔角色。自制积木,制作新的积木,名字就叫:瞄准射击。

·新建变量:目标敌人,选择仅适用于当前角色。

·创建第二个变量:检查目标,选择仅适用于当前角色。

·再创建第三个变量:检查目标ID,也选择仅适用于当前角色。

·在定义积木的下方添加代码,初始化变量,将目标敌人设置为none(表示没有),将检查目标设置为0,重复执行,次数由敌人ID列表的长度决定,即对所有敌人进行检查。

·将检查目标增加1,将检查的目标ID设为敌人ID列表中对应的ID。

·下面开始检查该目标是否进入射击范围。自制积木:敌人距离,在这个自制积木中添加两个参数,传入敌人的x、y坐标,都选择数字或文本类型。

·新建变量:敌人距离,选择仅适用于当前角色。

·计算两点间距离需要用到一个公式(如图),对照这个公式我们来计算敌人到炮塔的距离。

·在计算里找到平方根,计算x坐标差的平方,复制一下,计算y坐标差的平方,求和,再求平方根,把结果存到变量敌人距离里。

·我们来调用刚才自制的积木,传入检查目标的x、y坐标,进行判断。如果距离小于火力半径,并且进度大于最大进度,这里我们再创建两个变量,火力半径(适用于所有角色),最大进度(仅适用于当前角色)。

为什么要比较进度?大家思考一下如果有多个敌人进入射击范围,我们先攻击哪一个?是不是最前面的,也就是进度最大的?两个条件同时满足用积木,我们就把最大进度设置为当前敌人的进度,并且把目标敌人设置为当前检查敌人的ID。

通过这样一轮重复执行,如果有敌人进入火力范围,那么最终的目标敌人就是最前方的那个。在重复执行后面判断,如果有目标敌人,也就是变量目标敌人不等与none,那就要进行瞄准,即确定炮塔的方向。

这里又有两种情况,敌人在炮塔的左侧还是右侧,因为在右侧方向值是大于零的,左侧方向值是小于零的。判断左右只需要比较他们x坐标的大小,目标敌人的x坐标比炮塔的x坐标大,那就是在右侧,否则就是左侧。

以右侧为例,来看这个计算方向的公式。先根据公式计算出敌人与炮塔的夹角,然后用90减去夹角就是方向。下面就使用计算模块里的积木拼接进行计算。公式中的x1,y1是目标敌人的坐标,x2,y2是炮塔的坐标。设置炮塔面向的方向,在右侧用90减去夹角,复制一下,左侧就是-90减去夹角。

最后别忘了刚创建的两个变量需要初始化,在本段程序的开始位置,设置最大进度的值为一个比较小的值。刚开始进度都是零,那么给它设置为-1。再切换到火力范围角色,初始化火力半径,我的值为76,这个数就是你自己画的这个圆的实际半径。

再回到炮塔角色,选择自制积木,右键编辑,勾选"运行时不刷新屏幕",这样运行就不会有卡顿的现象。在克隆体启动的代码里使用我们定义的"瞄准射击"积木。

好了,我们来测试一下,放置炮塔,观察它有没有跟随敌人进行旋转?这一节的内容就到这里,下一节我们将让炮塔能够消灭这些敌人。如果有兴趣继续跟我一起完成这个游戏,欢迎点赞关注。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言