[ 分享 ]13.Adding Enemy States(怪物状态)--待机、闲逛、追击
我们本系列是油管上的HeartBeast的[Beginner] Make an RPG课程的中文笔记,主要形式是截图的方式进行步骤上的说明。面向对象:GameMaker新手,以学习一门脚本编程语言,制作一个RPG游戏为目标的爱好者。
本节的主要内容为:
- 创建怪物的闲逛、追击状态
- 闲逛:在没有发现玩家时,随机选取地图上的一个点作为目标点进行移动
- 追击:在发现玩家角色时,以玩家角色的坐标作为目标点进行移动
初始化怪物的属性
在obj_enemy_slime对象中创建alarm事件
然后在create事件中,创建怪物的属性:视野、目标点x坐标、目标点y坐标,速度、默认状态
创建脚本组
创建3个脚本组,依次为Helper Scripts、Player States、Enemy States。然后将对应的脚本移动到对应的组内。
创建闲逛和追击脚本
修改追击脚本
移除obj_enemy_slime的step事件中的移动代码,添加执行脚本状态。
这是因为我们需要将负责追击玩家角色的代码转移到scr_enemy_chase_state脚本中单独负责,保持模块的独立性。
在cr_enemy_chase_state脚本加入追击代码
创建怪物状态切换脚本
利用choose语句,在wander(闲逛)和idle(保持不动)之间的状态选择一个。在选择了状态后,马上将alarm[0]初始化,以便下一次触发选择脚本
即一旦alarm[0]减少到0,则在wander和idle两个状态中,选取一个,在选取后,直接重置alarm[0]的值。
创建检测玩家脚本来执行追击逻辑
创建脚本scr_check_for_player脚本来检测怪物的视野内是否有玩家角色
在idle状态中添加检测玩家执行代码
优化scr_check_for_player脚本
在找到玩家时,设定targetx和targety,对应在scr_enemy_chase_state中移除obj_player.x的引用。改为引用targetx.
创建wander代码
同样的,targetx在check检测脚本中已经完成,这里只是执行移动即可
总结一下: