PDA

Просмотр полной версии : Странный баг лоадера


ign
20.02.2008, 12:21
Существует система из 4-х классов:
Document.as - главный класс приложения
A.as - класс свфки A.swf
B.as - класс свфки B.swf
ExtLoader.as - класс, создающий композицию со стандартным классом Loader

Итак главная флешка с помощью обычного лоадера грузить в себя A.swf, та в свою очередь с помощью ExtLoader класса грузит B.swf.

Внимание, тут начинается самое интересное:
Если при компиляции главной флешки включить в нее класс ExtLoader, то флешка A.swf загружает B.swf и не может привести ее к классу B.

Если в главную флешку не компилировать класс ExtLoader - все нормально =\


Класс Document.as

import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.net.URLRequest;

//import ru.isky.multiloader.DataLoader;

/**
* @author ign
*/
public class Document extends MovieClip {

private var loader : Loader;

public function Document() {
ExtLoader;

//trace(getDefinitionByName('ru.isky.test::A'));
//trace(getDefinitionByName('ru.isky.test::B'));
loader = new Loader();
loader.load(new URLRequest('A.swf'));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onItemLoaded);
}

private function onItemLoaded(event : Event) : void {
//trace(getDefinitionByName('ru.isky.test::A'));
loader.content['load']();
}
}


Класс ExtLoader.as

import flash.net.URLRequest;
import flash.events.EventDispatcher;
import flash.display.Loader;
import flash.events.Event;

/**
* @author ign
*/
public class ExtLoader extends EventDispatcher {

private var request : URLRequest;
public var loader : Loader;

public function ExtLoader(url : String) {
super();
request = new URLRequest(url);
}

public function load() : void {
loader = new Loader();
try {
loader.load(request);
//startTime = getTimer();
} catch(loader_error : Error) {
//error(loader_error);
}
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadFile);
}

private function onLoadFile(event : Event) : void {
dispatchEvent(new Event(Event.COMPLETE));
}
}


Класс A.as

import flash.display.MovieClip;
import flash.events.Event;

/**
* @author ign
*/
public class A extends MovieClip {

private var exloader : ExtLoader;

public function A() {
trace("A CONSTRUCTOR");
}

public function load() : void {
trace("A.load( : " + arguments + ")");
exloader = new ExtLoader('B.swf');
exloader.addEventListener(Event.COMPLETE, loaderComplete);
exloader.load();
}

private function loaderComplete(e : Event) : void {
trace('is B:', exloader.loader.content is B);
}
}

Класс B.as

import flash.display.MovieClip;

/**
* @author ign
*/
public class B extends MovieClip {
public function B() {
trace("B CONSTRUCTOR");
super();
}
}


Тут исходники с классами, чтобы можно было сразу попробовать:
h t t p ://slil.ru/25496050

etc
20.02.2008, 13:36
LoaderContext, ApplicationDomain

ign
20.02.2008, 14:04
Благодарю.