![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 08.07.09]
Регистрация: Mar 2009
Сообщений: 107
|
Доброго времени суток.
Столкнулся с такой проблемой, мне нужно реализовать определенное количество контейнеров (количество контейнеров получаю с сервера), и к каждому контейнеру нужно прицепить свой Timer. Чтобы реализовать это я создаю массив Timer-ов и каждый Timer в функции обработчике должен знать свой индекс. Тут такая проблема как получить свой i в функции обработчике? в данном коде всегда возвращается 10 и это понятно, а как сделать чтобы возвращался свой i, то есть 1, 2, 3 и т.д? Код #1 package { import flash.display.*; import flash.events.*; import flash.utils.*; public class myClass extends Sprite { private var myTimer:Array = new Array(); public function myClass():void { for (var i:int = 0; i < 10; i++) { myTimer[i] = new Timer(1000); myTimer[i].start(); myTimer[i].addEventListener(TimerEvent.TIMER, function (e:*) { trace('Как тут получить доступ к своей переменной i?'); trace('i:'+i); // во всех 10 обработчиках, выдает 10 }); } } } } Код #2 package { import flash.display.*; import flash.events.*; import flash.utils.*; public class myClass extends Sprite { private var myTimer:Array = new Array(); public function myClass():void { for (var i:int = 0; i < 10; i++) { myTimer[i] = new Timer(1000); myTimer[i].start(); myTimer[i].addEventListener(TimerEvent.TIMER, doTime); } } public function doTime(e:TimerEvent):void { trace('Как тут получить доступ к своей переменной i?'); trace('i:'+i); } } } или вопрос можно поставить так: Как расширить экземпляр myTimer[i] и добавить в него например свойство id, чтобы выглядело так? Код #3 package { import flash.display.*; import flash.events.*; import flash.utils.*; public class myClass extends Sprite { private var myTimer:Array = new Array(); public function myClass():void { for (var i:int = 0; i < 10; i++) { myTimer[i] = new Timer(1000); // каким-то чудесным способом мы // тут добовляем экземпляру // новое свойство id myTimer[i].id; // а тут уже присваиваем этому // свойству само значения переменной i myTimer[i].id = i; myTimer[i].start(); myTimer[i].addEventListener(TimerEvent.TIMER, doTime); } } public function doTime(e:TimerEvent):void { // а в самой функции обработчеке мы уже // достаем это свойство id и // присваиваем его к переменной i var i:Number = e.currentTarget.id; trace('i:'+i); } } } Как расширить экземпляр myTimer[i] и добавить в него свойство id? |
|
|||||
|
Например так
package utils { import flash.utils.Timer; public class MyTimer extends Timer { public var id :int; public function MyTimer(delay:Number, id:int, repeatCount:int=0) { super(delay, repeatCount); this.id = id; } } } |
|
|||||
|
.
|
А зачем Вам вообще этот i? Сделате класс контейнера в котором композицией пропишите таймер. Диспатчите TimerEvent от имени контейнера. Подпишите контроллер на этот эвент. Делов-то!
|
|
|||||
|
Modus ponens
|
Если вы добавили таймер в массив, то у него уже есть индекс - его положение в массиве. Но лучше для таких целей использовать Dictionary, т.как в массив один и тот же таймер можно добавить много раз, а в Dictionary - только 1. Не вижу большого смысла в создании дополнительных классов только ради одного свойства. Кроме того, я бы не стал создавать много таймеров - а один, и подисывался / отписывался от него, когда нужно.
__________________
Hell is the possibility of sanity |
|
|||||
|
[+1 08.07.09]
Регистрация: Mar 2009
Сообщений: 107
|
Меня вообще не устраивает тот факт, что я должен ради этого создавать отдельный класс который будет расширяться от Timer, то есть (MyTimer extends Timer), можете дать пример где не надо создавать отдельный класс, а прямо в текущем коде (Код #3) можно расширить экземпляр экземпляр myTimer[i] и добавить в него свойство id?
Добавлено через 1 минуту Можете дать какой нибудь пример как можно правильно реализовать задуманный третий вариант? Последний раз редактировалось vvvvvvf; 08.07.2009 в 15:01. |
|
|||||
|
Modus ponens
|
>> а прямо в текущем коде (Код #3) можно расширить экземпляр экземпляр myTimer[i] и добавить в него свойство id?
Дык, говорю же, не нужно ничего расширять - вам нужен индекс из массива - но лучше Dictionary
__________________
Hell is the possibility of sanity |
|
|||||
|
.
|
Это были люди большого богатства. Но они хотели странного. (с) АБС
|
|
|||||
|
[+1 08.07.09]
Регистрация: Mar 2009
Сообщений: 107
|
Жизненных ситуаций очень много и я все же хотел был знать как расширять текущий экземпляр не создавая новый класс.
Например в таком коде: package { import flash.display.*; import flash.events.*; import flash.utils.*; public class myClass extends Sprite { private var myTimer:Timer; public function myClass():void { var i:Number = 0; myTimer = new Timer(1000); // каким-то чудесным способом мы // тут добовляем экземпляру // новое свойство id myTimer.id; // а тут уже присваиваем этому // свойству само значения переменной i myTimer.id = i; myTimer.start(); myTimer.addEventListener(TimerEvent.TIMER, doTime); } public function doTime(e:TimerEvent):void { // а в самой функции обработчеке мы уже // достаем это свойство id и // присваиваем его к переменной i var i:Number = e.currentTarget.id; trace('i:'+i); } } } вот еще раз повторю вопрос: Как в текущей ситуации экземпляру myTimer присвоить новое свойство id не создавая отдельный класс? |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:28. |
|
|
« Предыдущая тема | Следующая тема » |
|
|