В моей игре пауза срабатывает дважды, но так и должно быть и вот почему

В моей игре пауза срабатывает дважды, но так и должно быть и вот почему

С 2015 года в свободное время я делаю свою первую игру на Game Maker Studio. Добавляя и удаляя различные механики, множество раз меняя разные концепции, я не часто вспоминал о каких то первостепенных функциях, таких как настройки графики, главное меню и прочее. Но пауза это действительно необходимая вещь и в разные отрезки времени я пытался добавить её в игру.

Первые попытки были ещё в начале разработки примерно 2016-17 годах, уже тогда возникли определённые проблемы. Дело в том что большая часть объектов берёт свои переменные из объекта игрового персонажа и когда игра возвращалась из паузы все эти переменные выдавали множество ошибок. Тогда я не придал этому значения подумав что "Ну игра же ставиться на паузу и возвращается обратно, да есть какие то ошибки и игра вылетает, но это можно будет решить потом".

Потом наступило в 2019 году когда я заканчивал учёбу и моя игра стала моим дипломным проектом. И тогда мне частично удалось это сделать, частично потому что игра ставилась на паузу, возвращалась обратно, но с одной оговоркой, камера и некоторые объекты после возвращения в игру уходили на нулевые координаты. Пытаясь решить новую проблему я заметил что при повторном нажатии паузы и возобновлении игры всё возвращалось в норму. В который раз я оставил паузу в незаконченном виде. На защите диплома, во время презентации игрового процесса, я просто дважды активировал паузу в ручную. Никто вроде даже не заметил этого и я оставил попытки довести паузу до рабочего состояния до лучших времён.

Камера, объект оружия, всё улетает в ноль, но на удивление не объект игрока

И вот апрель 2022, уже скоро игра должна выйти, демо версия уже лежит в стиме, но полноценной паузы в игре как не было так и нет. Понимая что откладывать больше нельзя, я всерьёз взялся доделать уже эту злосчастную паузу. За три года в игре опять поменялось множество вещей и старая пауза опять не работала выдавая ошибки и вылетая. Всплыла та же самая проблема что и при первой моей попытке сделать паузу, объекты чьи переменные ссылаются на объект игрока не могут найти эти самые переменные, а таких объектов было очень много. Пытаясь избежать исправления каждого такого объекта я начал искать различные сторонние решения этой проблемы, расширения для Game Maker, другие способы паузы вместо instance_deactivate_all(), даже добавил к каждому объекту в игре exit() при нажатии паузы, что бы дальнейший код не выполнялся, но ничего из этого не помогло. Оставшись наедине с осознанием того что мне всё же придётся перелопатить огромную кучу из ошибок я принялся за работу. Спустя пару дней неспешного исправления, ошибок больше не возникало, но осталась ещё одна старая проблема, камера и объекты уходят в нулевые координаты. И у меня вроде как даже было решение, повторная активация паузы. Но убедить игрока в том что паузу нужно нажать дважды просто потому что иначе игра не будет работать, говорило бы о не самом лучшем состоянии игры.

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

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

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

Сама игра и её демо версия в стиме:

1919
7 комментариев

Добавь затемнение экрана перед срабатыванием паузы и мерцания не будет видно.

11
Ответить

Комментарий недоступен

12
Ответить

Классика разработки - работает через задницу, но работает же)

10
Ответить

Я обожаю истории про костыли! Во всех интервью на них внимание обращаю. По-моему, костыли - это изобретательно и классно, пусть и временно)

5
Ответить

костыливременно

4
Ответить

Комментарий недоступен

5
Ответить