Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как реализовать паузу в игре? (http://www.flasher.ru/forum/showthread.php?t=175063)

Kerins 08.02.2012 23:48

Как реализовать паузу в игре?
 
Доброго времени суток!= )
Пишу игру стрелялку и столкнулся с трудностью, нужно реализовать паузу в игре типа:
"возврат в игру"
"В главное меню"
И при нажатии на "Возврат в игру",чтоб возвращалась как буд-то нивчём не бывало, т.е. если снаряд летел или враг на тебя бежал,то по возвращению из паузы всё воспроизводилось с того места на каком была нажата кнопка ПАУЗЫ.
Т.е. трудность,как сделать так чтобы всё замараживалось,а потом при возврате восстанавливалось,без полного сброса всех параметров.
Очень буду благодарен за любую помощь!

Inet_PC 08.02.2012 23:52

Если обновление движения пуль и всего остального происходит по событию таймера, есть методы стоп/старт. Если же по Event.ENTER_FRAME то либо заведите переменную (var paused:Boolean), либо отписывайтесь от события а потом обратно подписывайтесь.

Kerins 09.02.2012 00:50

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

redefy 09.02.2012 01:24

У вас походу как-то сделано все через опу...

У вас все обновление игры происходит где? В игровом цикле? Или в каждом классе понатыкано куча листенеров и они живут сами по себе?

Реализуйте в каждом классе в котором в каждом кадре должно что-то происходить функцию update(), а в главном классе в игровом цикле вызывайте эти функции. Заведите флаг paused, в игровом цикле обновляйте состояние объектов (update()) только если paused==false;

Собственно при паузе ставьте переменную paused в true, обновление объектов прекратится и все замрет...

Kerins 09.02.2012 19:21

Всё в одном классе.У пули свой слушатель Event.ENTER_FRAME, у танка врага свой и есть общий слушатель,в котором все случаи касаний описаны,кроме тех случаев для которых отдельно свои Event.ENTER_FRAME.Походу можно все отдельные кинуть в общий.. и там по условию их и обрабатывать?...

Эта функция update() и будет слушателем события Event.ENTER_FRAME? и в ней отслеживать условие paused==false ?

А когда paused == true; всё будет стартовать с позиций перед нажатием "пауза"?

Monade 2 09.02.2012 19:56

Цитата:

Сообщение от Kerins (Сообщение 1061897)
У пули свой слушатель Event.ENTER_FRAME, у танка врага свой и есть общий слушатель,в котором все случаи касаний описаны

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

Kerins 09.02.2012 20:12

Я уже исправил) просто все условия скинул в один слушатель, теперь напишу метод который будет всё замараживать и метод который отмараживать обратно.

Tails 09.02.2012 20:37

У меня было так:
класс: BD - грубо говоря (хранит всю инфу о текущем состояний игры)
Класс: Logic - просчитывает изменения, раз в секунду, пол секунды, 1/30 секунды, вообще не просчитывает (нужное подчеркнуть)

fish_r 09.02.2012 21:34

А fps в ноль слабо поставить? )

Kerins 10.02.2012 00:32

fps в ноль?.. так ведь это наверное только для отдельного объекта, а если и пуля летящая и танк приближающийся и бэкграунд движущийся в рандоме?

TanaTiX 10.02.2012 00:39

fish_r, в 0 не пробовал, но теоретически все приложение может накрыться медным тазом до перезагрузки, если только для события разблокирования не поставить updateAfterEvent.

Аж интересно стало, надо будет попробовать на досуге. Или есть такой опыт?

fish_r 10.02.2012 01:11

Не знаю как там будет с анимацией, но я упустил из виду таймер. Причем работает он почему-то неправильно при fps=0 o_O

Monade 2 10.02.2012 13:09

Цитата:

Сообщение от fish_r (Сообщение 1061956)
Не знаю как там будет с анимацией, но я упустил из виду таймер. Причем работает он почему-то неправильно при fps=0 o_O

а неправильно - это как? как и положено, без привязки к фпс?

fish_r 10.02.2012 14:03

Нет. Как то вообще не правильно :) (таймстамп - цифры слева) :


Код:

//до остановки, таймер 3000, фпс 30

1328864372609. Main::timerHandler()  :
1328864375609. Main::timerHandler()  :
1328864378609. Main::timerHandler()  :
1328864381609. Main::timerHandler()  :
1328864384609. Main::timerHandler()  :
1328864387609. Main::timerHandler()  :

//после остановки, таймер - 3000,  фпс - 0

1328864387625. Main::timerHandler()  :
1328864388171. Main::timerHandler()  :
1328864388734. Main::timerHandler()  :
1328864389281. Main::timerHandler()  :
1328864389828. Main::timerHandler()  :
1328864390375. Main::timerHandler()  :
1328864390921. Main::timerHandler()  :
1328864391484. Main::timerHandler()  :
1328864392031. Main::timerHandler()  :


Zebestov 10.02.2012 14:41

Специально для неООПшно реализованных приложений смастерил небольшой класс.
Нужно будет просто перевесить все обработчики ENTER_FRAME, обеспечивающие анимацию, на общий таймер.

Inet_PC 10.02.2012 14:53

Цитата:

для неООПшно реализованных приложений
Ай-я-яй, но с другой стороны ООП - это, тот еще, тормоз.

Zebestov 10.02.2012 14:56

Когда я предлагаю что-то для неООПшной архитектуры, это не означает, что я ее одобряю. Это лишь означает, что мне совершенно не хочется холиварить про ООП.

Inet_PC 10.02.2012 14:59

Цитата:

мне совершенно не хочется холиварить про ООП.
Согласен, зря это я ...

Monade 2 10.02.2012 22:04

Цитата:

Сообщение от TanaTiX (Сообщение 1061952)
Аж интересно стало, надо будет попробовать на досуге. Или есть такой опыт?

он не дает поставить frameRate в ноль. 0.01 ставит

TanaTiX 10.02.2012 22:41

Monade 2, нехитрые манипуляции с байткодом, на сколько помню, должны помочь.


Часовой пояс GMT +4, время: 17:45.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.