应用克隆体引擎
接下来,我们要进行第二个“革命性”的改造:
- 使用我们之前制作的基于多莉的克隆体交互引擎,替换中级篇的列表交互。通过属性名称来直接读取克隆体数据,更加方便直观:
- 通过多莉,来实现跨角色克隆时的预设数据:
准备工作
之前的引擎中,我们给克隆体设置数据,是在克隆体产生之后。这样不是特别符合直觉,我们可以改成下面的“预设数据形式”,先预设克隆体数据,再克隆:
- 我们使用一个容器,用于记录下次克隆时,克隆体的预设数据:
通过设置容器的值,来添加克隆体的预设数据:
最后,在克隆之后,从容器中读取要预设数据,保存到刚克隆的克隆体中,然后清空容器:
2.此外,一次只能设置一个数据效率有点低。可以增加一个自制积木,用于一次设置多个数据:
克隆体引擎注意事项
- 如果要使用克隆体引擎的特性(例如预设数据),要使用右边的克隆积木,替代左侧的积木:
同样,删除克隆体时,最好使用右边积木替代原版积木:
(当然,如果角色不接入克隆体引擎,使用原版积木也没有问题)
- 由于点击绿旗时,会清空引擎数据,因此,不要在点击绿旗后立即克隆角色。(可以加等待 0 秒)
- 下面的两个积木存放了克隆体的 ID 和真 id(在克隆时设置的)。除此之外的其他数据都只是普通的数据,没有特殊含义。
例如,下面的代码设置了克隆体的“x”、“y”,只是给克隆体添加了名为x、y的数据,并没有真正设置克隆体的坐标。要想克隆体移到初始位置,需要手动添加相应的代码:
开始改造
接下来,我们将依次在各个“实体”中,应用克隆体交互引擎。
(注:改造内容很多,可以不用跟着一步一步编写代码)
改造玩家
- 首先看玩家的代码:
- 由于要使用克隆体引擎的功能,因此玩家改成由克隆体执行动作,而不是直接使用主体。
- 克隆时,指定 ID 为“玩家”,方便之后读取玩家克隆体的数据;
- 广播改成只有克隆体才接收(主体不执行动作):
- 我们可以为实体制作如下的两个全局积木:
- 读取初始信息:用于将预设信息读取到私有变量中。
实体生成后,需要先运行这个积木,读取初始信息。
- 上传信息:用于每帧的末尾,实体上传数据:
- 在舞台中,添加“上传数据”广播(要加在“刷新渲染”前)。
- 实体生成后,先读取初始信息到私有变量,然后每帧上传自己的数据:
通过每帧上传数据,其他角色就可以读取克隆体私有变量的信息
注:虽然可以直接将克隆体的“x”、“y”等数据用多莉键值对存放,而不是存在私有变量里,来方便其他角色读取。但是考虑到多莉键值对的读写效率相对较低,而角色的x、y等数据是频繁读写的数据,因此仍选择私有变量来存放克隆体的 x、y 等数据,方便快速读写。
- 设置玩家的血量等信息:
4.为玩家添加血条:
考虑到加血条是一个通用操作,因此可以改成全局积木:
- 玩家生成后,将玩家加入人物表;死亡时,从人物列表删除:
- 玩家扣血时,广播受伤:
- 玩家产生后,克隆自己的武器:
改造玩家武器
- 玩家武器也改成克隆体。玩家死亡时,删除玩家武器。
- 让武器跟随玩家:
- 将生成子弹的动作,改成全局积木:
计算枪口位置,也可以改成全局积木(因为敌人武器也会用到)
- 可以编写一些常用的计算积木,做成全局变量,如计算两个克隆体间的距离、方向:
- 近战武器的扇形判定,可以做成全局积木:
近战判定,以及击中后扣血代码如下:
扣除血量也可以做成全局积木:(其中伤害者、伤害方向可能会在之后的教程中用到)
这样,我们完成了对玩家、玩家武器的改造。
上一节 01 应用全局积木
下一节 03 继续改造
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=STG303/Arkos/Lec2/03&type=comment"
title="{射击课高级篇-第二课-03}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>