vvk80
07.11.2007, 20:02
Итак, есть два класса:
package
{
import flash.display.*;
import flash.events.*;
public class Test extends Sprite
{
private var evt:Event;
public function Test():void
{
trace("Test constructor called");
init();
}
private function init():void
{
evt = new Event("evt", true);
dispatchEvent(evt);
}
}
}
package
{
import flash.display.*;
import flash.events.*;
public class Main extends Sprite//document class
{
private var _test:Test;
public function Main():void
{
_test = new Test();
_test.addEventListener("evt", _onEvt);
}
private function _onEvt(evt:Event):void
{
trace("evt event called");
}
}
}
Не работает трейсер trace("evt event called");Почему он не работает, я вроде понимаю: event dispatchится до того ,как экземпляр класса на него подписался, и также понятно, что скорость загрузки такого класса мнгновенная, но елки палки, как все-таки заставить его сработать???
Не уж-то на таймер ставить? Мне просто нужна последовательная загрузка элементов, типа один загрузился, пошел второй, после второго третий и т.д. Когда я гружу элементы с картинками и добавляю событие OnComplete я в дебаге прям вижу, как код выходит из конструктора, подписывает экземпляр на событие и потом возвращается в код класса и уже потом диспатчит ивент...
P.S. Если что нет так делаю, то подскажите как правильно, пожалуйста!:rolleyes:
Просто в жизни эти классы не такие уж маленькие, но смысл я думаю, я сохранил...
тот же самый пример но с картинкой,
все события нормально диспатчатся
package
{
import flash.display.*;
import flash.events.*;
public class Test extends Sprite
{
private var evt:Event;
private var iconImg:BaseClass; //мой класс загрузки картинок и т.д.
public function Test():void
{
trace("Test constructor called");
init();
}
private function init():void
{
iconImg = new BaseClass(this,"firstPageDraft.png");
iconImg.initImg(0,0);
iconImg.addEventListener("loadComplete", _onIcoLoadComplete);
}
private function _onIcoLoadComplete(evt:Event):void
{
trace("_onIcoLoadComplete");
evt = new Event("evt", true);
dispatchEvent(evt);
}
}
}
P.P.S.
Пока нашел следующий workaround:
даже когда мне не нужно грузить картинку я ее все равно гружу, но потом делаю
iconImg = null, и все обнуляю, что еще надо обнулить...
Не знаю как там насчет производительности, но чувствую, что не очень...
package
{
import flash.display.*;
import flash.events.*;
public class Test extends Sprite
{
private var evt:Event;
public function Test():void
{
trace("Test constructor called");
init();
}
private function init():void
{
evt = new Event("evt", true);
dispatchEvent(evt);
}
}
}
package
{
import flash.display.*;
import flash.events.*;
public class Main extends Sprite//document class
{
private var _test:Test;
public function Main():void
{
_test = new Test();
_test.addEventListener("evt", _onEvt);
}
private function _onEvt(evt:Event):void
{
trace("evt event called");
}
}
}
Не работает трейсер trace("evt event called");Почему он не работает, я вроде понимаю: event dispatchится до того ,как экземпляр класса на него подписался, и также понятно, что скорость загрузки такого класса мнгновенная, но елки палки, как все-таки заставить его сработать???
Не уж-то на таймер ставить? Мне просто нужна последовательная загрузка элементов, типа один загрузился, пошел второй, после второго третий и т.д. Когда я гружу элементы с картинками и добавляю событие OnComplete я в дебаге прям вижу, как код выходит из конструктора, подписывает экземпляр на событие и потом возвращается в код класса и уже потом диспатчит ивент...
P.S. Если что нет так делаю, то подскажите как правильно, пожалуйста!:rolleyes:
Просто в жизни эти классы не такие уж маленькие, но смысл я думаю, я сохранил...
тот же самый пример но с картинкой,
все события нормально диспатчатся
package
{
import flash.display.*;
import flash.events.*;
public class Test extends Sprite
{
private var evt:Event;
private var iconImg:BaseClass; //мой класс загрузки картинок и т.д.
public function Test():void
{
trace("Test constructor called");
init();
}
private function init():void
{
iconImg = new BaseClass(this,"firstPageDraft.png");
iconImg.initImg(0,0);
iconImg.addEventListener("loadComplete", _onIcoLoadComplete);
}
private function _onIcoLoadComplete(evt:Event):void
{
trace("_onIcoLoadComplete");
evt = new Event("evt", true);
dispatchEvent(evt);
}
}
}
P.P.S.
Пока нашел следующий workaround:
даже когда мне не нужно грузить картинку я ее все равно гружу, но потом делаю
iconImg = null, и все обнуляю, что еще надо обнулить...
Не знаю как там насчет производительности, но чувствую, что не очень...