|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Apr 2010
Сообщений: 137
|
Аргументы функции при запуске таймера
В общем есть таймер timerForParts, после определенного времени выполняется функция deletePart.
Чтобы понятнее было, есть например у меня переменная temp. Я хочу чтобы эта переменная передалась той функции, которая выполнится после определенного времени пройденного таймером. Если кто все равно не понял, то вот набросал код private function some():void { //какая-то функция в классе, в которой я включаю таймер свой var temp:int = 0; var timerForParts:Timer = new Timer(5000, 1); timerForParts.addEventListener(TimerEvent.TIMER, deletePart); if (что-то) {temp = 1;} else {temp = 2;} timerForParts.start(); function deletePart():void { //вот тут я хочу использовать переменную temp. Просто напрямую написать temp не получится, так как функция some успевает ещё несколько раз выполнится и изменить temp до того момента, как включится таймер. } |
|
|||||
Регистрация: Dec 2009
Сообщений: 125
|
Объявите переменную на уровне класса, а не метода. И не используйте вложенные функции.
|
|
|||||
Кстати, в приведенном коде если внутри deletePart обратиться к temp, то все получится как хочет автор. Другое дело, компилятор ругнется на количество параметров означенной функции.
Добавлено через 3 минуты И да- хоть оно и будет работать, вложенные функции- это в 99,9% плохая идея.
__________________
cats are supreme beings |
|
|||||
Но только не путайте TIMER_COMPLETE и TIMER. Первая срабатывает на завершение работы таймера, а вторая на каждую итерацию. Учитывая что у вас количество повторений равно единице, есть резон слушать просто TIMER_COMPLETE
package { import flash.display.Sprite; import flash.events.TimerEvent; import flash.utils.Timer; public class SomeClass { private var _timer:Timer = new Timer(5000, 1); private var _temp:int = 0; public function SomeClass():void { _timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler); _timer.start(); if (Math.random() > 0.5) _temp = 1; else _temp = 2; } private function timerCompleteHandler(e:TimerEvent):void { _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler); trace(_temp); } } }
__________________
adobe AS3 manual |
|
|||||
Регистрация: Apr 2010
Сообщений: 137
|
Так если я в функции deletePart напишу напрямую temp, он же возьмет значение, которое есть в момент вызова функции deletePart. А мне нужно значение temp именно с того раза, когда я запустил таймер. Функция some несколько раз ещё может вызваться пока идет таймер.
|
|
|||||
по сути вам нужен слушатель с параметром
http://www.flasher.ru/forum/blog.php?b=239 http://www.flasher.ru/forum/blog.php?b=291 |
|
|||||
Просто наследовать таймер, со своими аргументами
public class TimerPayload extends Timer { private var _payload:int; public function TimerPayload(delay:int, repeatCount:int, payload:int) { super(delay, repeatCount); _payload = payload; } public function get payload():int { return _payload; } } package { import flash.display.Sprite; import flash.events.TimerEvent; import flash.utils.Timer; public class SomeClass { private var _timer:TimerPayload = new TimerPayload(5000, 1, 5); // Устанавливаем значение public function SomeClass() { _timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler); _timer.start(); } private function timerCompleteHandler(e:TimerEvent):void { _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler); trace(_timer.payload); // Получаем значение } } }
__________________
adobe AS3 manual Последний раз редактировалось strangedk; 04.01.2013 в 19:25. |
Часовой пояс GMT +4, время: 00:14. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|