Наследование методов в GML

Итак, у меня есть система «триггеров» в моде для Pizza Tower, я сделал так, чтобы были родительский 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, поэтому не знаю, имеет ли это какое-то отношение.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В GameMaker функциональные литералы «сглаживаются» во время компиляции, поэтому

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

становится чем-то вроде

greet = method(self, gml_Script_anon_1);

с gml_Script_anon_1 содержащим

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

Если вы пытаетесь перезаписать метод внутри события, вы можете найти его отдельно в списке «Сценарии», хотя это зависит от реализации UTMT.

Я думаю, это сработает. Так стоит ли мне также использовать метод_call?

SalticHash 18.04.2024 19:14

Это не сработало, он просто сказал, что методы, которые я определил, не были определены, поэтому, если вы не знаете других, я, возможно, воспользуюсь неуклюжей, но работающей системой сигнализации, возможно, ошибки на данный момент связаны с UTMT, я не знаю.

SalticHash 19.04.2024 04:12

Я думаю, это может быть из-за реестра функций или чего-то в этом роде, я слышал, что это проклятие data.win, если каким-то образом вы заставляете UTMT думать, что это функция, без использования gml_Script_anon.

SalticHash 20.04.2024 06:45

Если вы не можете добавить новый литерал функции, вы можете добавить обычный скрипт и привязать его к экземпляру с помощью method (или не привязывать его к экземпляру и использовать script_execute для его запуска)

YellowAfterlife 20.04.2024 13:45

Это могло бы сработать, но я нашел текущий ответ намного лучше и понятнее, к тому же вы могли не понять вопрос.

SalticHash 24.05.2024 04:07
some() уже должен компилироваться в self.some(), когда нет вызываемой функции/скрипта some, но это может быть проблемой с UTMT — посмотрите, легко ли это воспроизводится, и если да, сообщите об ошибке.
YellowAfterlife 25.05.2024 20:38
Ответ принят как подходящий

Способ исправить это: Всегда добавляйте к своим методам префикс self..

Например, чтобы избежать создания function buffer thing несуществующей функции в любых других файлах, вы можете сделать, например: self.execute() Таким образом, вы можете сделать execute = function() {things here} для дочернего элемента, и родительский скрипт выполнит новое определение функции!

Кроме того, здесь используется UTMT:CE, и если вы поставите self., и он удалит его, это потому, что в этом нет необходимости, если он сохранит его, это имеет значение.

Я сделал этот вывод путем небольшого тестирования, так что все может быть неправдой.

Другие вопросы по теме