[ 分享 ] 9.ADDING ENEMIES, DEPTH, AND INHERITANCE(增加敌人,理解深度和继承)
本系列是油管上的HeartBeast的[Beginner] Make an RPG课程的中文笔记,主要形式是截图的方式进行步骤上的说明。面向对象:GameMaker新手,以学习一门脚本编程语言,制作一个RPG游戏为目标的爱好者。
本节主要内容:
实现效果为,让地图出现一些怪物,并且这些怪物是会追着角色跑的(即向着角色的坐标进行移动)
- 创建史莱姆的精灵
- 创建史莱姆对象
- 将怪物设置在房间中
- 创建史莱姆的移动代码
- 史莱姆碰撞事件
- 父物体和继承
- 深度控制
首先要在游戏里放物体,自然是要遵循通用的规则:先创建精灵,创建对象,拖到对象到房间里。
创建史莱姆的精灵
命名为spr_enemey_slime,并导入精灵图片
创建史莱姆对象
创建对象obj_enemy_slime,然后选择精灵,并且设置对象的碰撞盒形状
选择形状的类型为Convex Shape自由设置顶点形状,然后将形状拉成三角形
注意在这个过程中,碰撞盒的形状不可以是内凹的,这是GMs进行顶点计算所要求
将怪物设置在房间中
并设置obj_enemy_slime的create事件:控制动画播放速度
创建史莱姆的移动代码
史莱姆碰撞事件
依次创建obj_enemy_slime与人物,墙体,史莱姆本身的碰撞事件,在碰撞事件内不用添加代码,只需要添加一行描述即可,表示需要调用碰撞事件
同样的我们需要修正旋转的问题
父物体和继承
创建一个对象,命名为obj_lifeform_parent,设置它与墙体的碰撞(同样的碰撞事件内不需要书写代码, 只需要添加注释说明即可)
然后回到obj_player中来,设置它的父物体为obj_lifeform_parent,这样就可以删除掉它本身的与obj_wall的碰撞了,因为它继承了父物体obj_lifeform_parent的属性(包含了与obj_wall的碰撞)
//继承是指子物体继承父物体的变量属性和事件
将修正旋转的代码也移动至父物体的create事件中,因为会将obj_player和obj_enemy_slime的父物体都设置为lifeform,所以可以移除两个对象的互相碰撞事件了,只需要添加与obj_lifeform_parent的碰撞事件即可。
对应在lifeform对象的create事件中,添加修正旋转代码,移除obj_player和obj_enemy_slime的旋转代码,设置它们的父物体为obj_lifeform_parent
注意这里有个问题,如果父物体和子物体都存在相同的事件时(如create事件),如果想要在子物体中含有父物体的属性,就需要在子物体中使用函数event_inherited(),不然就只会执行子物体事件中的内容
深度控制
在lifeform事件中,添加深度控制的代码
同样的,要在子物体(obj_enemy_slime)的对应的step事件中添加事件继承代码