Замечания интересные и отчасти полезные, однако не хватает ссылок на документацию.
Зачем вы используете delete в подобном контексте?
var strSize = (string_width(string("GUI " + string(i+1)))+16)/sprite_get_height(Sprite1)
...
dеlete strSize
var gui = instance_create_depth(x,y,0,GUI)
ds_stack_push(oGUIControl.GUIStack, gui)
oGUIControl.GUISize++
return gui
delete(gui)
и т.д.
Посмотрите справку, delete нужен совсем для другого - он уничтожает ссылку на структуру, чтобы ее в последствии удалил сборщик мусора.
А вы туда переменные подставляете, идентификаторы инстансов и все остальное.
Причем даже в случае структур, использование delete не обязательно - сборщик мусора удалит структуру, когда пропадет последняя ссылка, а это случится автоматически, если структура была определена в временной переменной, в инстансе, который был уничтожен или в переменной, которая была перезаписана.
Как написали выше, достаточно удалить sprite_dublicate, который там совершенно не нужен и оставить просто mask_index = sMask; и утечка памяти исчезнет.
Я хотел бы перечислить некоторые ответы на ваше сообщение:
1. В справке я найти инфу не могу по Delete и Create, но возможно я не умею ей пользоваться.
2. На счёт дубликата понятно, и я знаю, что можно юзать mask_index.
3. Это самый важный пункт, Мне не подходит mask_index, т.к. на момент сборки игры я не могу знать на 100% какие габариты и размеры будут у кнопки. По этому я хочу задавать маску уже кодом, а не использовать готовые ресурсы.
Так же я понимаю, что я могу чего-то не знать или забыть, по этому прошу отвечать с конкретными ссылками на справочник или другие статьи, если таковые всплывают на ум. Это будет полезно не только мне но и людям которые ищут ответ на схожую проблему.
Спасибо)
И да, ещё пару слов о спрайтах. В поисках решения проблемы была найдена идея менять размер спрайта не в рисовании через draw_sprite_ext, но так же можно воспользоваться переменными размера спрайта. Я попробую проверить эту гипотезу, но не помню, в справке информации о том, что границы маски этого спрайта изменяться пропорционально.
3.
Добавлено: Декабрь 03, 2021, 14:54:33 Я так же хотел бы рассказать свои результаты по поводу эксперимента с созданием объекта.
Я сделал недавно довольно простой проект, где есть 2 объекта, один из которых это объект позволяющий создавать второй объект.
В этом первом объекте есть небольшой код который проверяет нажатие ЛКМ и так же реализован небольшой откат до следующего создания объекта.
Второй объект представляет собой просто объект со спрайтом и перегруженное событие нажатия ПКМ по себеже, при котором уничтожаем этот объект.
Остальное в проекте это 1 спрайт, 1 комната с минимальными изменениями от стандартной настройки и в комнате размещён объект "создатель", назовём его так.
Да я не уточнил то, что создаю объект я при помощи функции instance_create_layer(mouse_x,mouse_y,layer,oBox).
В общем если запустить такой проект (прикреплю во вложениях), то можно будет заметить, что если создать довольно много объектов, то память вырастает и это логично, но если моментально попробовать удалить все эти объекты, то размер занимаемой памяти не вернётся в самое начало и по сути измениться на несколько процентов от максимальной загруженности.
Вот конкретный скриншот где можно взглянуть на изменения:
