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
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