敌人系统 - dasasdhba/Super-Mario-Vandal-Editor GitHub Wiki

本章主要介绍本项目的敌人系统,其主要由父对象 o_enemy 提供支持。

参数

在对象 o_enemyUser Defined 0 事件中可以找到本项目敌人系统使用的全部参数。 项目中的注释使用英文,且不一定完整,以下给出完整的中文注释。

//这段代码应该在 Create 事件中使用
enemy = true //用于标记物件是否属于敌人
hurt = true //是否使马里奥受伤
hurt_flag = false //敌人弄伤马里奥的一瞬间为 true,否则为 false
turn = true //是否与其他敌人碰撞后转向,其他敌人的 turn 也需要设为 true
turn_flag = false //开发用不上

head = 16 // 敌人头部的高度

shell = 0
shell_atk = false
shell_count = 0
/* shell 变量定义了敌人的“硬度”,举例来说:
shell = 0: 普通龟壳
shell = 1: 硬壳
...
如果 shell_atk 被设为 true, 这个敌人将会攻击其他敌人
shell_count 用于龟壳连击计数
*/

atk = 0
/*
攻击判定类型
atk = 1: 踩
atk = 2: 火球
atk = 3: 甜菜
atk = 4: 顶
atk = 5: 龟壳
atk = 6: 无敌星
atk = 7: 其他 (岩浆, 挤死等)

*/

/* def 定义敌人将如何回应对应的攻击:
>0: 敌人能被攻击,atk 会被设为对应值
=0: 敌人能被攻击,但是 atk 仍为 0
<0: 该种攻击无效
有时候,=0 和 <0 效果相同,比如顶、龟壳、无敌星等
*/
def_stomp = 1
def_fireball = 1
def_beet = 1
def_bump = 1
def_shell = 1
def_star = 1
//下面这些对应的 atk 是 7, 不受无敌状态的影响
def_lava = 1
def_crush = 1

invincible = false //敌人是否无敌

用法

首先将敌人的 Parent 设为 o_enemy,其他方面与物理引擎的用法类似:

  1. 在对象的 Create 事件中执行event_user(0),根据需求调整上面的参数;
  2. Step 事件中执行event_user(1),敌人事件即可正常工作。 当然,你需要注意global.pause,所以更准确地来说,Step 事件中应该这样编写:
if !global.pause
    event_user(1)

项目内置了大量的敌人,均可用于参考学习。