shalvir

На Пикабу
Дата рождения: 20 июня
100 рейтинг 0 подписчиков 0 подписок 1 пост 0 в горячем

Первая костыльность в первой игре. GML

это просто мой рассказ о сегодняшней проблеме в гейм-мейкер студии. кому то может быть полезно для улучшения видения проблем в коде. рекомендуется лицам "шарющим" за GML и gamemaker studio.

в коде создания рума описана структура уровня и ивенты добавляются в таблицу текущей миссии - считывается игроком и если текущий тик = тику события то оно вызывается.

ticks += 1

if mission_events[ticks ] {...}

проблемой стало то что в иерархии ивентов в виде:

add_tick(5, ...) - сработает на 5 секунде

add_tick(10, ...) - сработает на 10 секунде

add_tick(15, ...) - сработает на 15 секунде

add_tick(20, ...) - сработает на 20 секунде

очень неудобно сменить продолжительность одного ивента чтобы она вписалась во всю цепочку.

например хочу изменить один из первых ивентов, просто укоротить ее продолжительность - мне придется укоротить все ивенты вручную из за этого

5 -> 3

10 -> 7

15 -> 13

20 -> 17

поэтому я поменял вид структуры на:

add_tick(5, ...)

add_tick(5, ...)

add_tick(5, ...)

add_tick(5, ...)

где первое значение равно тому, сколько секунд должно пройти с предыдущего ивента. это удобно и легко поддается редакции + понятно что "событие полет длится 10 секунд", а не 420 секунда миссии = полет.

но и тут не без проблем. обработчик тиков записывал какой ивент исполнен в виде expired_events[tick] = true или expired_events[5 секунд] = true и проверял, находится ли текущий ивент в этой таблице.

и в виде повторяющихся ивентов длинною в 5 сек, очевидно, сработал бы только 1. поэтому я думал ввести сид для каждого ивента (это было крайне тупое и импульсивное решение).

минус этого метода в том что я все еще не понимал как правильно проходиться по валидным ивентам. t = (ticks += 1) + условие с поиском наименьшего валидного ивента ближе всего к t? что то в этом роде должно было происходить но на половине пути я просто полежал 5 минут и понял, что:

в коде создания я использую функцию add_tick() - ее вид должен быть удобен с одной стороны. а другая сторона обрабатывает аргументы и может просто приплюсовать к ticks (5) общую продолжительность миссии за кулисами:

mission_duration = 0

mission_duration += tick

valid_events[mission_duration(0) + tick(5)] = ...

mission_duration += tick

valid_events[mission_duration(5) + tick(5)] = ...

mission_duration = 10

и после этого уже добавляем в таблицу ивентов миссии.

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

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

в скором времени начнут выходить новости о моей первой тестовой игрушке на платформе itch.io.

пока

Показать полностью
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества