PDA

Просмотр полной версии : Копирование swf


k0syak
12.12.2009, 14:19
Доброе всем время суток.

Такая проблема. Загружаю внешнюю swf (клас Elem extends Loader), в которой несколько children-ов.
Затем мне необходимо клонировать эту swf - ку. Делаю так:

................

public var bytes:ByteArray; //Байты swf-ки. Чтобы потом создавать копии объекта


public function Elem() {
}

public function LoadSWFElem(Iurl:String) {
var urlRequest:URLRequest = new URLRequest(Iurl);
this.url = Iurl;
contentLoaderInfo.addEventListener(Event.COMPLETE, CompleteLoadObj);
load(urlRequest);
}

private function CompleteLoadObj(e:Event) {
//Загрузили объект
e.target.removeEventListener(Event.COMPLETE, CompleteLoadObj);
bytes = e.target.bytes;
}


Затем создаю новый объект типа Loader и в нем загружаю bytes исходного elem:

myClass.loadBytes(elem.bytes);

Затем делаю addChild(myClass);
Все замечательно... загружается вся swf - ка.



НО: хочу добавть только чилдрен этой swf - ки, получается лажа... Пишет что чилдренов у нее нету(myClass.numChildren = 0). В чем может быть дело???

Dos87
26.12.2009, 09:11
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;

public class Xxx extends Sprite
{
private var mySWF:Object;

public function Xxx()
{
loadSWF("http://blablabla.ru/someSWF.swf");
}

private function loadSWF(swfURL:String):void
{
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener (Event.INIT, loaderInitHandler);
loader.contentLoaderInfo.addEventListener (ProgressEvent.PROGRESS, loaderProgressHandler);
loader.contentLoaderInfo.addEventListener (IOErrorEvent.IO_ERROR, loaderIOErrorHandler);
loader.load (new URLRequest(swfURL));
}
private function loaderInitHandler (e:Event):void
{
e.target.removeEventListener (Event.INIT, loaderInitHandler);
e.target.removeEventListener (ProgressEvent.PROGRESS, loaderProgressHandler);
e.target.removeEventListener (IOErrorEvent.IO_ERROR, loaderIOErrorHandler);
//Вот загруженная swf'ка
mySWF = e.target.content;
//Клонируем так
var cloneMySWF:Object = cloneSWF(mySWF);
//Или так
var child1:Object = cloneSWF(mySWF.child1);
//Или так
var child2:Object = cloneSWF(mySWF).child2;
//Добавляем
this.addChild(cloneMySWF as DisplayObject);
this.addChild(child1 as DisplayObject);
this.addChild(child2 as DisplayObject);
}
private function loaderProgressHandler(e:ProgressEvent):void
{
progressBar.scaleX = e.bytesLoaded/e.bytesTotal;
}
private function loaderIOErrorHandler(e:IOErrorEvent):void
{
//Error
}

private static function cloneSWF(targetObject:Object):Object
{
var targetClass:Class = targetObject.constructor;
return new targetClass();
}
}