GML 中的方法继承

问题描述 投票:0回答:1

所以,我在披萨塔的模组中有一个“触发器”系统,我制作了一个

obj_trigger
父级和一个
obj_delay
子级,父级有一个方法来执行触发器的主要功能。

obj_trigger 创建

trigger_id = -1;
target_trigger_id = -1;

on_enter = 1;
on_touch = 0;
on_trigger = 0;

multi = 0;
activated = 0;

execute = function(triggered) //gml_Script_anon_gml_Object_obj_trigger_Create_0_0_gml_Object_obj_trigger_Create_0
{
    var triggered = argument0;
}

obj_trigger 房间开始

if (on_enter && (!activated))
{
    execute(false)
    if (!multi)
        activated = 1;
}

obj_delay 创建

event_inherited()
delay = 1
execute = function(argument0) //gml_Script_anon_gml_Object_obj_delay_Create_0_0_gml_Object_obj_delay_Create_0
{
    var triggered = argument0
    if (triggered && (!on_trigger))
        return;
    if (triggered && activated)
        return;
    if (triggered && (!multi))
        activated = 1
    if ((delay == 0))
        alarm[0] = 1
    else
        alarm[0] = (delay * room_speed)
}

这里的问题是我试图用新方法覆盖

gml_Script_anon_gml_Object_obj_trigger_Create_0_0_gml_Object_obj_trigger_Create_0
,但它却变成了
gml_Script_anon_gml_Object_obj_delay_Create_0_0_gml_Object_obj_delay_Create_0

我正在使用UndertaleModTool,所以我不知道这是否与它有关。

game-maker gml game-maker-language
1个回答
0
投票

在 GameMaker 中,函数文字在编译期间被“扁平化”,因此

greet = function(name) {
    return "hi, " + name + "!";
}

变成类似于

的东西
greet = method(self, gml_Script_anon_1);

gml_Script_anon_1
包含

return "hi, " + argument0 + "!";

如果您尝试覆盖事件内的方法,您也许可以在脚本列表中单独找到它,尽管这取决于 UTMT 实现。

© www.soinside.com 2019 - 2024. All rights reserved.