![]() |
Как реализовать паузу в игре?
Доброго времени суток!= )
Пишу игру стрелялку и столкнулся с трудностью, нужно реализовать паузу в игре типа: "возврат в игру" "В главное меню" И при нажатии на "Возврат в игру",чтоб возвращалась как буд-то нивчём не бывало, т.е. если снаряд летел или враг на тебя бежал,то по возвращению из паузы всё воспроизводилось с того места на каком была нажата кнопка ПАУЗЫ. Т.е. трудность,как сделать так чтобы всё замараживалось,а потом при возврате восстанавливалось,без полного сброса всех параметров. Очень буду благодарен за любую помощь! |
Если обновление движения пуль и всего остального происходит по событию таймера, есть методы стоп/старт. Если же по Event.ENTER_FRAME то либо заведите переменную (var paused:Boolean), либо отписывайтесь от события а потом обратно подписывайтесь.
|
я тоже думал сделать отписывание, однако если много параметров которые должны быть потом воспроизведены после паузы как нивчём не бывало,то много писать,мне показалось это не правильным, ведь должен быть правильнее и красивее вариант.
Я думал записать все переменные в массив а потом их оттуда вытягивать через for и останавливать. |
У вас походу как-то сделано все через опу...
У вас все обновление игры происходит где? В игровом цикле? Или в каждом классе понатыкано куча листенеров и они живут сами по себе? Реализуйте в каждом классе в котором в каждом кадре должно что-то происходить функцию update(), а в главном классе в игровом цикле вызывайте эти функции. Заведите флаг paused, в игровом цикле обновляйте состояние объектов (update()) только если paused==false; Собственно при паузе ставьте переменную paused в true, обновление объектов прекратится и все замрет... |
Всё в одном классе.У пули свой слушатель Event.ENTER_FRAME, у танка врага свой и есть общий слушатель,в котором все случаи касаний описаны,кроме тех случаев для которых отдельно свои Event.ENTER_FRAME.Походу можно все отдельные кинуть в общий.. и там по условию их и обрабатывать?...
Эта функция update() и будет слушателем события Event.ENTER_FRAME? и в ней отслеживать условие paused==false ? А когда paused == true; всё будет стартовать с позиций перед нажатием "пауза"? |
Цитата:
|
Я уже исправил) просто все условия скинул в один слушатель, теперь напишу метод который будет всё замараживать и метод который отмараживать обратно.
|
У меня было так:
класс: BD - грубо говоря (хранит всю инфу о текущем состояний игры) Класс: Logic - просчитывает изменения, раз в секунду, пол секунды, 1/30 секунды, вообще не просчитывает (нужное подчеркнуть) |
А fps в ноль слабо поставить? )
|
fps в ноль?.. так ведь это наверное только для отдельного объекта, а если и пуля летящая и танк приближающийся и бэкграунд движущийся в рандоме?
|
fish_r, в 0 не пробовал, но теоретически все приложение может накрыться медным тазом до перезагрузки, если только для события разблокирования не поставить updateAfterEvent.
Аж интересно стало, надо будет попробовать на досуге. Или есть такой опыт? |
Не знаю как там будет с анимацией, но я упустил из виду таймер. Причем работает он почему-то неправильно при fps=0 o_O
|
Цитата:
|
Нет. Как то вообще не правильно :) (таймстамп - цифры слева) :
Код:
//до остановки, таймер 3000, фпс 30 |
Специально для неООПшно реализованных приложений смастерил небольшой класс.
Нужно будет просто перевесить все обработчики ENTER_FRAME, обеспечивающие анимацию, на общий таймер. |
Цитата:
|
Когда я предлагаю что-то для неООПшной архитектуры, это не означает, что я ее одобряю. Это лишь означает, что мне совершенно не хочется холиварить про ООП.
|
Цитата:
|
Цитата:
|
Monade 2, нехитрые манипуляции с байткодом, на сколько помню, должны помочь.
|
| Часовой пояс GMT +4, время: 17:45. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.