instance_change


描述

你可以使用此函数将物体的一个实例更改为另一个物体的另一个实例,同时这样做决定是否执行初始实例销毁(Destroy)和清理(Clean Up)事件和新实例创建(Create)事件。通过这种方式,你可以(例如)将炸弹更换为爆炸 - 在这种情况下, “perf” 参数可能为 true,因为你希望炸弹执行其销毁事件和清理事件,以及爆炸执行其创建事件 - 或者你可以将你的玩家角色更改为另一个 - 在这种情况下,“perf” 参数可能为 false,因为你不希望实例执行其创建和销毁 / 清理事件。

值得注意的是,更改实例意味着在下一步之前不应对该实例执行任何进一步的操作,特别是尝试访问变量等...因为这将导致错误。基本上,你更改实例但在当前步结束之前实际上不可用,因此直接访问它包含的任何变量(例如,调用 obj_Changed.x)将不起作用。

警告!更改启用物理的实例时,物理属性 不会被 转移到要更改的新实例。因此,你应该有代码将当前实例的物理状态 “转移” 到新实例,或者在其创建事件或物体编辑器中定义新实例的物理属性。因此,建议你不要将此函数与启用物理的实例一起使用,而应使用 instance_destroy()instance_create_layer() 的组合。


语法:

instance_change(obj, perf);


参数:

参数 描述
obj 调用物体将变为的新物体。
perf 执行该新物体的创建和销毁事件(true)与否(false)。


返回:

N/A(无返回值)


例如:

if keyboard_check(vk_enter)
   {
   instance_change(obj_Player_Swimming, false);
   exit;
   }

上面的代码将调用实例变为 “obj_Player_Swimming” 的实例而不执行原始实例销毁事件,也不会在用户按下 “Enter” 键时执行新实例的创建事件,完成后退出代码块。