继续改造
下面,我们接着前面的内容,继续改造人物、人物武器、子弹的代码。
一、改造人物角色
对“人物”角色的改造是最大的。之前我们通过列表来进行克隆体交互。有了多莉扩展,下面的列表可以全部删除:
人物的生成
- 首先,编写随机选点函数,用于随机选择人物生成位置:
- 接着,编写生成敌人的全局积木:(这样就可以在其他角色中调用生成敌人的代码)
人物的动作
- 为人物添加以下代码:(其中上传数据时,额外上传一个亮度数据,用于让人物武器和自己同步亮度)
Scratch 中,设置角色音量的积木不会立刻执行完毕,而是会有一帧的执行时间。因此不能放在广播中,而是放在循环里。
其中,调整音量可以做成如下全局积木:
- 添加下面的代码:
- 人物血量归 0 时,将自己存活状态设为 0。
- 人物读取自己的定义:
- 人物设置初始信息
- 人物动作
- 人物死亡后处理
- 人物受到攻击时,变暗效果:
人物 AI 动作
- 人物每隔一秒,就查找一次敌人。如果找到敌人就执行对应攻击动作:
其中,这一部分实现了一个定时器功能,用变量记录上次觅敌时间,如果时间间隔超过 x,就进行下一次觅敌,从而实现了每 x 秒执行一次的效果:
其中,查找最近敌人代码被写在了全局积木中:
不同种类的AI动作如下:
二、改造人物武器
类似的,为人物武器编写下面代码:
当武器的持有者死亡时,武器删除自己:
武器产生后,读取自己的“所属ID”(即属于哪个人物),读取自己的武器定义信息(如伤害等)。并设置自己持有者的攻击类型(如果自己是近战武器,则将持有该武器的人物的攻击方式设为“近战”;反之亦然)
武器根据自己的种类执行不同的动作。武器的攻击目标由自己的持有者的“目标ID”决定:
近战武器动作:采用半圆形判定方式
远程武器动作:
其中“攻击指令”代表 人物的攻击状态,0 为不攻击,1 为攻击。
(注:由于开始时,持有者的“攻击指令”可能为空,因此判断时 +0,转为数字【字符串在运算中会当成 0 处理,因此空 + 0 等于 0】)
三、改造子弹角色
- 子弹中,添加如下代码:
- 子弹启动后,如果没有指定造型,造型默认为自己的名字;同时读取子弹的额外上移值(这里 +0 也是为了转为数字,防止出现返回空的情况)
这里根据“子弹”的类别,大致分了三类子弹动作,以便收纳。
3普通子弹的动作:
火箭弹动作:
其中,子弹分步检测障碍、检测击中敌人的代码如下:
子弹检测是否击中敌人的代码如下:(后面的教程会介绍“坦克”,子弹检测击中时,对坦克使用圆形判断,对一般士兵则用矩形判断)
4.金币掉落物的动作
5克隆体并行的一些动作(如火箭放置尾烟,道具几秒后消失)
四、改造血条
血条添加下面代码:
血条读取自己跟随的人物的 ID,当人物死亡,血条也删除自己。
五、改造地图背景
添加下面的代码:
背景t 即遮挡物,遮挡物总是挡在所有物体之上,物体的主图层为 3,因此遮挡物的主层设为 2.9;而背景总是在最底层,因此主图层设为 4.
这样,我们就基本完成了对中级篇引擎的改造,用基于多莉的克隆体引擎替代了列表!
上一节 02 应用克隆体引擎
下一节 04 小结
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=STG303/Arkos/Lec2/04&type=comment"
title="{射击课高级篇-第二课-04}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>