
Код AS3:
package {
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
public class Star extends MovieClip {
private var timers:Array = new Array;
public var stars:Array = new Array();
private var i:Number = 0;
public function Star() {
stars[i] = this;
timers[i] = new Timer(100, 0);
timers[i].addEventListener(TimerEvent.TIMER, timerListener);
timers[i].start();
i++;
}
private function timerListener(e:TimerEvent) {
randomFade();
}
private function randomFade():void {
alpha = Math.random();
}
public function dospose():void {
timer.stop();
}
}
}
artcraft, для примера я немного модернизировал код. Теперь при каждом создании экземпляра класса Star, он записывается в массив с собственным индексом и его собственный таймер тоже хранится в своей массиве с аналогичным индексом.
Предположим, что была создана одна звезда: Тогда методы фактически сработают так:

Код AS3:
private function timerListener(e:TimerEvent) {
stars[0].randomFade();
}
private function randomFade():void {
stars[0].alpha = Math.random();
}
Но если создано, например, 5 звезд, как программа определяет над каким stars[k] (где k - произвольное число от 0 до 4) вызывать метод randomFate()?
...
Кажется я понял! Функция-приёмник timerListener() ведь тоже является методом экземпляра! Это значит, что для каждого timer существует своя функция timerListener в том же самом экземпляре класса Star. А я до этого думал (не знаю почему, но буквально была уверенность), что starListener один такой на все таймеры? разбросанные по разным объектам.
Но верна ли моя теперешняя версия?

Код AS3:
if(myVersion) {
trace(artcraft, спасибо вам!);
}
UPD:
Пока я писал это сообщение к дискуссии подключился господин
Wolsh, который удивительно точно угадал мою ошибку и подтвердил версию, родившуюся у меня в голове. Спасибо и вам огромное! Погружение своего мозга в ООП не самая простая задача, знаете ли... :)