Спасибо за советы, попробую и так и так)
Премного благодарен друзья
Добавлено через 10 часов 33 минуты
Цитата:
Сообщение от wvxvw
Сохранить ее как ByteArray (снять с LoaderInfo.bytes) и потом дублировать через Loader.loadBytes()
|
Написал класс для отображения предзагрузки. Он привязан на обычный мувик который собственно и будет подгружаться. Подскажите что я делаю не так?

Код AS3:
package code
{
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.utils.ByteArray;
public class _LoadViewer extends MovieClip
{
private var loader:Loader;
private static var ba:ByteArray;
public function _LoadViewer()
{
if (!ba)
{
ba = loaderInfo.bytes();
}
}
public function setLoader(_loader:Loader):void
{
loader = _loader;
loader.addEventListener(ProgressEvent.PROGRESS, showProcess);
loader.addEventListener(Event.COMPLETE, hnComplete);
}
protected function showProcess(eventProgress:ProgressEvent):void
{
trace ('Не перекрыт метод отображающий процесс загрузки.');
}
protected function hnComplete(event:Event):void
{
trace ('Загрузка завершена убиваем отображение');
killSelf();
}
private function killSelf():void
{
parent.removeChild(this);
}
static public function createClon():_LoadViewer
{
if (ba)
{
var l:Loader = new Loader();
return l.loadBytes(ba) as _LoadViewer;
}
return null;
}
}
}
Получаю ошибку при компиляции в 22 строке

Код:
1061: Call to a possibly undefined method bytes through a reference with static type flash.display:LoaderInfo. ba = loaderInfo.bytes();
P.S.: Подсветка синтаксиса это здорово)
Добавлено через 34 часа 9 минут
Цитата:
Сообщение от SunShadow
Получаю ошибку при компиляции в 22 строке
 Код:
1061: Call to a possibly undefined method bytes through a reference with static type flash.display:LoaderInfo. ba = loaderInfo.bytes();
|
Разобрался. Во первых я пытался получить свойство а вызывал метод. Исправил. А во вторых оказалось что у меня стоит плеер версии 9.0.45, который не поддерживает свойство bytes (оно заявлено только с 9.0.115). Поставил CS4 и ошибки пропали.
Только копии не получаются(
После полной загрузки мувика через Loader создаю экземпляр объекта без добавления его на сцену. В самом объекте создал статическую переменную и пытаюсь ее заполнить

Код AS3:
package code
{
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.utils.ByteArray;
import flash.utils.getQualifiedClassName;
import flash.utils.getDefinitionByName;
public class _LoadViewer extends MovieClip
{
private static var ba:ByteArray;
public function _LoadViewer()
{
if (!ba)
{
ba = this.loaderInfo.bytes;
}
}
public function createClon():Object
{
if (ba)
{
var l:Loader = new Loader();
return l.loadBytes(ba) as _LoadViewer;
}
return null;
/*var someClass:Class = loaderInfo.applicationDomain.getDefinition(getQualifiedClassName(this)) as Class;
var lv:* = new someClass();
return (lv as _LoadViewer);*/
}
}
}
Вариант загрузки через ByteArray возвращает объект null. Вариант создания клона через определение класса приводит к обвалу всего плеера.
Да еще возможно как то влияет что при загрузке внешней флэшки в качестве главного используется класс наследник от _LoadViewer
Добавлено через 37 часов 13 минут
Ну вот нашел у MerlinTwi в Tips метод как создать дупликат дисплэй объекта.

Код AS3:
package code.utilits
{
import flash.display.DisplayObject;
import flash.geom.Rectangle;
import flash.utils.ByteArray;
import flash.display.Loader;
/**
* duplicateDisplayObject
* Создает дубликат DisplayObject,
* аналогично методу duplicateMovieClip из AVM1
* @param target Дублируемый объект
* @param autoAdd Если true, то созданный дубликат будет добавлен
* на сцену туда же, где и оригинал
* @return возвращает ссылку на дубликат
*/
public class CopyMaster
{
public function CopyMaster():void
{
}
public function makeCopy(target:DisplayObject, autoAdd:Boolean = false):DisplayObject
{
// Создаем дубликат (constructor в кавычках, чтобы компилятор не ругался в strict mode)
var targetClass:Class = target["constructor"];
var duplicate:DisplayObject = new targetClass();
// Дублируем свойства
/*duplicate.transform = target.transform;
duplicate.filters = target.filters;
duplicate.cacheAsBitmap = target.cacheAsBitmap;
duplicate.opaqueBackground = target.opaqueBackground;
if (target.scale9Grid) {
var rect:Rectangle = target.scale9Grid;
// Баг, Flash 9 возвращает scale9Grid в 20 раз больше чем на самом деле
rect.x /= 20, rect.y /= 20, rect.width /= 20, rect.height /= 20;
duplicate.scale9Grid = rect;
}
// Добавить дубликат к target.parent
// если autoAdd установлен в true
if (autoAdd && target.parent) {
target.parent.addChild(duplicate);
}*/
return duplicate;
}
}
}
В принципе работает. Закоментил дублирование свойств потому что с ними попытка в адльнейшем взаимодействовать с обоими мувиками приводило в падению флэша.