Всё ещё учусь работать в Game Maker (GMS 1.4.9), параллельно участвуя в конкурсе на GCup.
1)Немного неприятно, то что разрешение экрана и FPS нужно менять в каждом уровне отдельно,
по логике это должно выноситься в опции и быть общим для всех уровней.
2)Также немного прокачал рисование персонажа для кастомизации, хотя возможно это всё будет лагать при 60 FPS на слабом ПК, я не уверен:
- 18 июня 2020, 17:21
- 04
Мне очень понравился GM, и понял что на нём можно сделать простые игры, но пока не уверен,
можно ли делать более сложные игры, как я пытаюсь на юнити:
1) Вывезет ли Game Maker, если на уровне будет где-то 2000 отдельных объектов и у каждого объекта свой
Depth
(Z Order)? Если мой комп еле вытягивает Morrowind и Mount & Blade: Warband. При том что юнити работает со скоростью 100 FPS с этой моей картой в 2000 объектов и у каждого свой Order (порядок отрисовки). Потом хочу провести эксперимент с GMS и запихать тонну объектов на локацию.2) Легко ли редактировать такой уровень в GMS, где много объектов друг с другом пересекаются? И много контента, и всё это без TileSet и TileMap элементов (потому-что тайлы не люблю, их делать сложно, чтобы они аккуратно друг к другу подходили и не повторялись), а то пока я в Game Maker немного запутался в редакторе, то ли там неудобно сделано, или я просто ещё не привык.
3) И можно ли в редакторе GMS настроить порядок отрисовки сразу не включая игру? А то я пока не понял как сделать так, чтобы одни объекты рисовались раньше других в редакторе и чтобы это также выглядело в игре при запуске. В моей игре леталке на GMS легко, потому-что объекты не пересекаются друг с другом.
Попытался сделать пока без Depth скрипта, и получился порядок отрисовки совершенно разный,
слева в редакторе справа в игре. Но если в игру прикручивать скрипт Depth от Y оси, то как прикрутить это так, чтобы это выглядело также и в редакторе?
PS лол, комменты уже лагают в гугл хроме) пора завязывать с этой темой)
Такого функционала в GMS пока нету, увы.
А сторонние библиотеки создания уровней есть?
PS Я слышал есть Tiled, и возможно можно прикрутить к GMS, но не уверен, что в самом Tiled есть функция создания тонны объектов (без тайлов) с функционалом Depth или Order и чтобы это выглядело один в один как и в редакторе, так и в игре. Надо бы погуглить инфу про Tiled.
Можно свой редактор на том же гамаке сделать
одно время я делал редактор на Blitz Max, сделал, но больше не хочу) долго и муторно
ХЗ. Я на гамаке много редакторов сделал уже. И то до GMS2 в основном. А там уже встроенных средств дофига для этого.
1) Вообще большие игры на GMS делать можно(см. тот же Hyperlight Drifter). Вряд ли прям с большим открытым миром, лучше делить игру на локации/комнаты. Можно реализовать руками динамическую подгрузку.
Сам GMS 2000 вывезет но редактор комнаты может начать подтормаживать.
2) Если по слоям грамотно раскладывать, то просто редактировать.
У меня не совсем большой открытый мир, а скорее большой остров, его можно пройти где-то секунд за 15-30 из одной части локации в другую. Не люблю слишком огромные миры, лучше пусть они будут насыщенные, чем огромные но пустые)
Я думаю одна большая локация Hypelight Drifter, как у меня весь остров по размеру, просто у меня насыщенность объектов большая. Я пока боюсь за количество объектов, они ещё и разные и с разной Depth, и если GMS это вытянет, то хорошо :3
Ну так Hyper Light Drifter целиком на GMS1.4 сделан. Так что всё вытянет.
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps
https://kolenka.net/posts/na-chto-sposoben-vash-dvizhok-gamak-derzhit-34000-obektov-na-59fps
В GMS2 легко - там можно задавать конкретно слои для объектов и передвигать целые группы объектов послойно. В GMS1 такого нет, только depth, и в редакторе всё будет выглядеть как попало. Однако, сделать свой редактор действительно проще простого - тебе же по сути ничего не нужно кроме расположения объектов по x, y и depth? Во встроенном редакторе можно ещё поворачивать объекты на угол и масштабировать по двум осям.
Ничего сложного на скриншоте не увидел. Я думал ты там что-то вроде Factorio покажешь, где на экране 100x100 клеток и внутри каждой какие-то процессы ещё идут.
Ну ладно, я пока не буду заморачиваться со своим редактором, это долго, надо сохранение и открытие файла смотреть, потом придумывать интерфейс и как загружать картинки с теми же названиями что и из игры, это морока, лучше буду пока простой проект делать, то есть для начала эту леталку допилю.
А не надо ничего загружать - это просто будет одна из комнат самой игры, в том же проекте. От интерфейса тебе что нужно? Просто список всех объектов, разве нет? В файлы всё пишется через
https://docs.yoyogames.com/source/dadiospice/002_reference/data%20structures/ds%20lists/ds_list_write.html
и читается через
https://docs.yoyogames.com/source/dadiospice/002_reference/data%20structures/ds%20lists/ds_list_read.html
Тут делов-то на один вечер. Хейз, скажи?
Ну нет, там и кнопки надо расставлять, чтобы выбирать в этих кнопках объекты для расставления по карте мышкой, я ещё даже незнаю как мышкой по кнопке попадать, и скроллинг объектов надо думать как делать ибо объектов будет много) также я ещё не делал скроллинг самой карты полюбому там много того что я не учёл есть, там много всего будет того, что отвлечёт от игры) я лучше простые игры поделаю на GM
Да легче лёгкого. Ивент Left Pressed делаешь и всё - как только попадаешь по пикселю спрайта объекта, срабатывает код.
Ты имеешь в виду список для расстановки, список уже расставленных (тогда это список инстансов), или двухмерная прокрутка самого уровня на котором ставятся инстансы?
Там на самом деле комплексная задача для не программиста, но программисту наверное легче с такими вещами. У меня разработка такого редактора займёт примерно от месяца, до полугода. Даже если на GMS легче это делать, то я его не изучил нормально, а кнопки я делаю простым рисованием спрайта без какого-либо объекта, который можно проверить на коллизию с мышкой, там наверное надо проверять в каком районе находится мышка и попадает ли она в координаты кнопки X,Y,W,H
Но даже если забить на меню и сделать весь выбор через клавиатуру, то всё равно много работы)
Сохранение, загрузка.
Хотя я представил один простой вариант, если сделать управление клавиатурой:
Move Keys - скроллинг (перемещаем сразу объект)
Z - cоздание объекта
A - удаление?
X C - скроллинг объектов
S - save (не представляю как сделать сохранение легко)
L - load (загрузка тоже сложна)
Ну и загрузка библиотеки спрайтов не представляю как сделать. Тем более ещё не пробовал делать игру со скроллингом на GMS, там наверное для отрисовки HUD и отдельно отрисовки локации ещё надо учитывать что-то.
Всё это делается изи. Есть событие DrawGUI где всё движение камеры уже учтено. Это не ебаные фреймворки на HTML5 где нужно вручную всё пересчитывать.
Сохранение делается через with, лёгкий набросок:
Загрузка примерно так же только нужно будет распарсить строку.
Для тех объектов что должны сохраняться нужно парентом указать o_saving_prototype
Переменная asset_name должна хранить название актуального объекта. Я бы не стал полагаться на название самих ассетов и сделал бы словарь соответствия строка-объект.
Чтобы не парсить строку можно воспользоваться структурами данных примерно так:
Способов много разных есть
Ну ты поторопился, косяков много: asset_name вместо id и open_read вместо open_write.
В общем, я решил что хватит уже мучать этот пост, раз у Алекса браузер подвисает, и создал отдельный, для развития конкретно этой системы. Так что переходим туда.
Я использовал твой код, только поправил его чтоб он работал, и работал именно так, как надо. Добавил третий словарь и конвертацию между именем и индексом объекта.
Последнее - да. А вот asset_name - это строка которая хранится в объекте и по ней при загрузке сцены создавать нужные объекты.
Я назвал это obj_name, хотя по идее это может быть и набор объектов, но индекс-то всё равно один. Проще создавать один объект, который будет создавать уже группу - то о чём постоянно Алекс говорил насчёт префабов в Юнити.
Конечно каждый раз ухмыляюсь с этого заголовка. "Ваш" движок и "наш". "Вашим" и "нашим" их делает, конечно же, использование "нами" и "вами", да. Сразу приятно становится на душе, что "наши" "ваших" этсамое, и мы за компанию, да.
"Наших" там не уточняется, но комментарий прикольный. :yak: