Пауза в игре

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.

Пауза в игре

Сообщение Agiliter » 19 окт 2014, 10:59

Добрый день!
Естественно, при создании игры задумался о паузе. Самый простой вариант, как я думал, делать все апдейты привязанными к frameRate. Т.е. там, где требуется пользование промежутками времени, использовать Event.ENTER_FRAME. Соответственно при паузе ставить stage.frameRate = 0; и всё - все анимации и процессы, завязанные на частоте кадров останавливаются, а затем возобновить можно, просто вернув stage.frameRate = 30. Однако не тут-то было. Когда ставлю

получаю трейсом значение 0.01 и соответственно процессы замедляются, но не останавливаются. Как я узнал свойство frameRate может принимать значения не от 0, а от 0.01 до 1000. Безобразие.

Теперь, как вижу два выхода: или создать какой-то глобальный таймер (каким образом?), который можно было бы останавливать и снова запускать, или же создавать в каждом из множества объектов метод pause() и start(), что как-то геморно. Есть у кого подобный опыт, как сделать проще?
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: Пауза в игре

Сообщение XELAD » 19 окт 2014, 21:24

Лично у меня в визуализируемых классах прописаны public static var & function UPDATE(). Если нет паузы, то в одном общем enterFrame пишу class1.UPDATE(); class2.UPDATE(); Классы же у себя в static var хранят ссылки на экземпляры, обновляют их в цикле (в public static function UPDATE).
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.

Re: Пауза в игре

Сообщение Agiliter » 06 ноя 2014, 15:47

Собственно, пришел к такому выводу. Завязать всё на один таймер или enterfarame. Вот с реализацией как обычно.
Как я думаю, некий глобальный контроллер передает свой таймер всем заинтересованным объектам, которые по тикам делают update. Когда же нужно поставить на паузу, то мы останавливаем таймер, и у всех объектов автоматически останавливается update. Логично? Только вот передавать всем нужным объектам таймер.. Очень большая связность, что не есть хорошо.

Другой момент. Фактически при паузе необходимо останавливать все звуки, все визуальные эффекты, ставить на паузу все локальные таймеры и т.д. Как это реализовать вышеизложенным подходом непонятно. Может быть создать какие-то отдельные классы для контроля на над всеми звуками, над всеми эффектами и т.д., а затем подписать их на события START, PAUSE, RESUME в каком-нить глобальном контейнере? После диспетчерезации этого события, все подписанные на него сервисы принимают необходимые меры для обеспечения функционала. Также тогда придется подписывать на на эти события все остальные объекты. Помогите разобраться.
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Re: Пауза в игре

Сообщение XELAD » 08 ноя 2014, 17:14

Не знаю, что вы имеете в виду под "эффектами". Расширить MovieClip, контролируя текущий воспроизводимый кадр, используя вместо (gotoAnd)Play -(gotoAnd)Stop(кадр), достаточно легко. При Update() обновлять цифру текущего кадра. Нет Update - нет воспроизведения.
Для звуков и музыки придётся писать отдельный менеджер, или позаимствовать в интернете ;)

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

А говоря о локальных таймерах, мой совет: не используйте их, и не нужно будет отключать.
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.

Re: Пауза в игре

Сообщение Agiliter » 08 ноя 2014, 20:55

XELAD писал(а):Передавать всем, кого вы хотите контролировать, ссылку на таймер, это, как я понял, добавить слушатель TICK каждому заинтересованному объекту. Не лучшая идея.


Почему?
XELAD писал(а):Не знаю, что вы имеете в виду под "эффектами".

Анимации любого рода.
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Re: Пауза в игре

Сообщение XELAD » 10 ноя 2014, 03:07

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

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.


Вернуться в Программирование на Flash



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron