Всё ещё учусь работать в Game Maker (GMS 1.4.9), параллельно участвуя в конкурсе на GCup.
1)Немного неприятно, то что разрешение экрана и FPS нужно менять в каждом уровне отдельно,
по логике это должно выноситься в опции и быть общим для всех уровней.
2)Также немного прокачал рисование персонажа для кастомизации, хотя возможно это всё будет лагать при 60 FPS на слабом ПК, я не уверен:
- 18 июня 2020, 17:21
- 04
Странно, хотел получить имя у объекта, чтобы потом его сохранить, и на новом уровне создать снова этот объект используя имя, но при тестировании вместо имени в обоих вариантах получил "<undefined>"

этот скрипт находится в родителе o_BoxCore, а по сути настоящий объект это o_Box,
но хз как получить доступ к чайлду от этого скрипта родителя, или здесь другая ошибка
Тебе наверное, нужно там вместо self написать object_index (или self.object_index, без разницы) - по сути это айди ресурса-объекта. Когда ты пишешь в коде название ресурса-объекта - то это тоже айди, т.е. номер ассета по порядку в дереве ассетов справа. Если перенесёшь ресурс то этот нормер поменяется. Это внутренняя кухня для понимания. Иногда попутаешь в функции instance_create порядок аргументов и утебя херня создастся.
Так что вот смотри:
object_index - это айди ресурса. Его можно передавать в instance_create функции
object_get_name(object_index) - строковое название ресурса, его ты передать в эти функции не можешь. Но есть функция asset_get_index, которая по этой строке найдёт id ресурса.
Если ты хочешь это использовать для сохранения состояния игры то лучше получать строку. Если в рамках одной игровой сессии то проще будет object_index хранить.
Спасибо сработало)

Звучит как собственный костыльный механизм персистентности. Хейз уже объяснил в чём ошибка, но - зачем тебе такая штуковина в принципе? Очень интересно стало.
Если бы ты не сказал "на новом уровне", я бы просто подумал - ага, значит можно прятать объекты в сундуки, как бы погружая их в стазис, а потом вызывать обратно. Но ты говоришь про другой уровень...
Взять ящик в руку и например сохраниться или перейти на другой уровень.
Нужно сохранить String название объекта, чтобы уметь воссоздать объект из текстовой информации.
Если при перезагрузке уровня можно сделать объект неуничтожаемым, то при сохранении и загрузки игры это не сработает, так что решил что при старте героя будет генерироваться "Box" в руках (какой-то инструмент, который можно бросить во врага или использовать), если он есть
Глобальная переменная после смены уровня не обнуляется... Нужно либо ручное обнуление, либо полный рестарт. Надеюсь, ты понимаешь к чему я веду... А ещё есть дата структуры и куча всего, чтобы не сохранять string название
Мне это как раз и нужно, хочу сохранить в что-то типа
global.BoxName = "o_Box";
С дата структурами пока ещё не разобрался, думаю на днях попрактиковаться с этим,
я так понял речь идёт про массивы и списки.
Опять таки, зачем тебе нужен этот string? Что-то типа global.item = o_box будет сильно просто? Не усложняй себе жизнь. В случае необходимости сохранить более сложную структуру - можно использовать массив
А как сохранить это o_Box не в string формате при сохранении игры?
Это смотря как ты будешь делать сохранение) Как по мне, самый простой способ, это использовать ds_map. Более сложный способ - буфер. Но нигде не нужен этот string.
Ты просто сохраняешь переменную (например global.item). За остальные нюансы не беспокойся - gm сам со всем разберётся и при считывании сохранения присвоит правильные значения. Главное, при обращении к переменной, проверить существует ли такой объект с помощью функции object_exists
Просто я ещё не изучал вопрос сохранений, но в других движках (в которых работал Unity, Stencyl, Blitzmax) обязательно надо сохранять либо в string, либо в int/float значениях, потому заранее подстраховаться пытался.
Если тут можно вообще споконо id объектов сохранять, и эти id никогда не собьются, то хорошо), то есть если я вдруг начну менять, часть объектов переназывать, удалять или заменять или добавлять новые.
Если для сохранений игры то в строках храни названия объектов. Я обычно словарь создаю, чтобы как раз при переименованиях ничего не слетало
Оооо. Я это делал в Мёртвой Звезде XD
Почему именно string? Можно сохранить просто индекс, без кавычек.
А чтобы воссоздать переменные инстанса, используй ds_map и:
http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/json_encode.html
http://docs.yoyogames.com/source/dadiospice/002_reference/file%20handling/json_decode.html
Конкретно в случае алекса я думаю можно просто ящик и игрока сделать персистентными - тогда всё будет сохраняться из комнаты в комнату.
У меня в Мёртвой Звезде случай посложнее - там можно таскать объекты из комнаты в комнату и более того - там же их оставлять, так что помимо перехода игра должна должна запоминать в какой комнате на какой позиции игрок оставил предмет. Делается не так чтобы уж сложно.
Жесть, я такое в первый раз не буду пытаться осилить)
Спасибо, хотя пока я не дошёл до сохранений, с другой механикой застрял, не могу придумать как сделать нормальное выталкивание объекта из другого объекта если он застрял в нём, разные велосипеды придумываю,
но вроде бы нашёл решение или хз)
Collision Event с тем из чего хочешь выталкиваться:
Это мягкое выталкивание по 1 пикселю за 1 степ. Можно добавить while, но там сложнее отлаживать будет, начни с простого (а если на нём удастся и закончить во всех нужных игровых ситуациях, то и отлично).
о, Спасибо) а то я там больше кода навернул) раза в 3-4 больше
Ну да, по сути это костыль персистентности)