05 事件控制
之前,我们把敌人出兵代码写在敌人里,但敌人如何出兵和游戏流程密切相关,我们可以把出兵控制代码转移到另一个专门的游戏流程控制角色里。
下面,我们创建一个新角色——“事件控制”。这个角色将专门用于控制各种游戏事件,包括:
- 控制关卡初始化,例如关卡载入哪张地图、进入地图时玩家能否操控、进入地图时初始摄像机位置在哪;
- 控制关卡流程,例如,玩家击倒靶子后,触发新剧情;当玩家移到某个位置后,触发新剧情;
- 控制实体生成,例如,控制敌人出兵,放置玩家的友军;
- 胜利条件判断、失败条件(如玩家死亡)判断……
加载关卡地图
- 在之前的教程中,我们将地图载入的代码放在了“地图背景”角色中。现在我们将相关代码转移到“事件控制”角色里:
- 这里对下面的自制积木做了一些改动:
关卡初始化
- 添加下面的代码,用于初始化关卡信息:
其中,部分变量的作用如下:
- 摄像机跟随ID:记录相机跟随的物体,设为空则不跟随任何内容。
- 是否禁用玩家输入:设为 1 则禁止玩家输入,玩家无法移动、攻击;设为 0 则可以正常操纵。
- 下面两个积木分别控制 UI 显示、血条显示:
- 下面的变量设置“移动禁区”的造型:
所谓的移动禁区,就是人物不能通过,但是子弹可以通过的区域。例如下面框住的区域,只会挡住人物移动,不会挡住子弹:
可以使用一个角色作为移动禁区(类似地图碰撞箱角色)。通过设置移动禁区造型,来改变玩家不能通过的区域:
移动禁区代码如下(和地图碰撞箱类似):
在检测移动碰撞的地方,增加额外检测移动禁区的代码:
制作新手教程关卡
有了前面铺垫的一系列内容,我们终于可以开始制作我们的新手关卡制作的部分了。
- 在“事件控制”角色,添加下面的代码,设置相机初始位置、生成玩家。
其中下面的代码用于设置相机位置(不填则默认移到玩家位置),以及是否取消相机的跟随玩家:
下面的代码用于在指定坐标生成玩家(不填则默认在地图出生点生成玩家)
- 接着,禁止玩家输入,并放置军官,让军官一直看向玩家:
- 让相机以 sin 函数平滑移动的方式,聚焦到玩家位置:(这个积木用于相机的平滑聚焦到某个坐标)
在相机对准玩家后,收缩地图右边界(“右边界”对应列表第 4 项(1~4 项依次对应“上下左右”)),右边界设为 -60。
- 接下来,添加教官对话:
- 教官说完后,允许玩家输入,让相机开始跟随玩家。
- 接着,玩家开始第一个任务:移到标记点。(标记点是一种特殊“子弹”)
在“子弹”角色中编写标记点的代码:标记点以三角函数的方式规律缩放。当玩家靠近后删除标记点。
- 然后,在地上放置武器“刀”,让玩家捡起:
- 放置靶子,等待玩家击倒:
- 接着,扩展地图右边界到 481,放置 G18 手枪,等待玩家拾起:
- 介绍能量水晶机制(使用能量水晶作为武器弹药,装填武器时,扣除能量水晶)
- 介绍按 R 装填子弹,放置靶子:
- 接着,放置新武器:
- 击倒三个靶子后,新手关卡完成!
广播黑幕,然后广播结束游戏(用于删除游戏克隆体,停止游戏);接着设置关卡为“关卡1”,进入下一关卡。
在实体类克隆体中添加如下代码:
这样,我们就完成了第一个关卡——新手教程关!
上一节:04 按[E]交互
下一节:06 小结
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=STG303/Arkos/Lec4/06&type=comment"
title="{射击课高级篇-第四课-06}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>