![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2010
Сообщений: 19
|
Есть fla файл
Нужно чтобы программа после выполнения: init(); doSomething(); //останавливалась и ждала секунду или несколько, а затем выполняла: doSomethingElse(); //и наконец end(); Если использовать эту конструкцию: function sleepingFun (event:TimerEvent):void { doSomethingElse(); } var tact:Timer = new Timer(1000,1); tact.addEventListener(TimerEvent.TIMER_COMPLETE, sleepingFun); tact.start(); Добавлять в sleepingFun end не имеет смысла, так как пауза может быть и вложенной и последовательно несколько пауз может быть. Я уже с неделю над задачкой бьюсь. Помогите, плиз или подскажите, может я чего не понимаю? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Ну наверно создать Очередь? Например массив методов. И в обработчике событий таймера вызывать их по очереди (по счетчику).
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Не использовать таймеры. Использовать только одно подписывание на ENTER_FRAME, которое у всего, чего надо вызывает когда надо update(dt), где dt - время между фреймами.
http://www.kongregate.com/forums/4/topics/1773
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 19
|
Пример кода можете привести?
Добавлено через 2 минуты Цитата:
А что касается приведенного в статье кода, то он не полный. Можете помочь понять о чем там речь идет? |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Я больше за организацию основного цикла работы в играх писал и паузы типа юзер вызвал меню %)
init(); doSomething(); //останавливалась и ждала секунду или несколько, а затем выполняла: doSomethingElse(); //и наконец end(); Надо понять, как вообще покадровая система флэша работает. Где-то было описание, но я сейчас не найду, потому своими словам (с неточностями, но основную идею передает): идёт обработка всех событий (заход в кадр и обработка кода, типа того, что выше - тоже там), затем отрисовка, затем, если осталось время, можно поспать и потом цикл повторяется. Ну т.е. у вас там было написано - так так оно и выполнилось, в одном кадре. В статье речь о том, что можно сделать "класс" типа такого. package { import flash.events.Event; import flash.utils.getTimer; public class Update { private static var oldTime:Number = Number.NaN; private static var updateables:Array = new Array; private static var pauseLevel:int = 0; public static function update(ev:Event):void { var nowTime:Number = getTimer(); if (isNaN(oldTime)) oldTime = nowTime; var dt:Number = nowTime - oldTime; oldTime = nowTime; if (pauseLevel == 0) { for each(var updateable:Object in updateables) { updateable.update(dt); } } } public static function pause():void { ++pauseLevel; } public static function unpause():void { --pauseLevel; } public static function add(updateable:Object):void { //лучше написать интерфейс IUpdateable, в котором есть только одна функция public function update(dt:Number):void; и заменить все Object на IUpdateable updateables.push(updateable); } public static function remove(updateable:Object):void { for (var i:int = 0; i < updateables.length; ++i) { } } } } Писать в кадрах при таком подходе оч. тяжко, что только плюс =)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 19
|
Спасибо.
А пример использования такого класса можете привести? Только не очень сложный. Добавлено через 6 часов 22 минуты Я только начинаю программировать на Action Script. Без понятия как использовать этот класс. Я сейчас делаю так: Это fla файл: var mstate:int = 0; // начальное состояние программы var tact:Timer = null; function init() { trace("INIT");} function doSomething(){ trace("DO SOMETHING");} function doSomethingElse() { trace("DO SOMETHING ELSE"); } function end() { trace("END"); } function nowDoIt (event:TimerEvent):void { doSomethingElse(); mstate = 3; } function pauseDoSomethingElse() { if(tact == null) { tact = new Timer(5000,1); tact.addEventListener(TimerEvent.TIMER_COMPLETE, nowDoIt); tact.start(); } } function main(event:Event) { if(mstate == 0) { init(); mstate = 1; } else if(mstate == 1) { doSomething(); mstate = 2; } else if (mstate == 2) { pauseDoSomethingElse(); } else if (mstate == 3) { end(); mstate = 4; } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:38. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| delay , pause , задержка времени |
|
|