![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Здраствуйте уважаемые.
Вопрос в следующем. Из флэшки подгружаю внешнюю флэшку(какую именно сам не знаю, выясняется это в процессе загрузки). Мне ее (эту внешнюю флэху) нужно по необходимости многократно добавлять в свой мувик. Как правильно это делать? ![]() Вроде все должно быть просто, да вот как не ведаю. Буду благодарен за любой толковый совет.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
А я думал это делается как то через классы и создание нового экземпляра. Вот только как получать экземпляр этого класса не очень представляю.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
Modus ponens
|
Мой вариант проще, кроме того, в загружаемой флешке могут быть классы которые можно создать всего 1 раз, и номер с повторным созданием не пройдет.
__________________
Hell is the possibility of sanity |
|
|||||
|
[+1.3 31.10.08]
Регистрация: Sep 2008
Сообщений: 8
|
Пример:
var loader:Loader = new Loader() ;
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onLoadComplete ) ;
// а также IOErrorEvent.IO_ERROR и прочие события
var urlRequest:URLRequest = new URLRequest( "cave.swf" ) ;
loader.load( urlRequest ) ;
function onLoadComplete( e:Event ):void
{
var caveClip:Object = e.target.content ;
graphicContext.addChild( caveClip as DisplayObject ) ;
}
Последний раз редактировалось smilenka; 10.11.2008 в 19:29. |
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Спасибо за советы, попробую и так и так)
Премного благодарен друзья Добавлено через 10 часов 33 минуты Цитата:
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; } } } 1061: Call to a possibly undefined method bytes through a reference with static type flash.display:LoaderInfo. ba = loaderInfo.bytes(); Добавлено через 34 часа 9 минут Цитата:
Только копии не получаются( После полной загрузки мувика через Loader создаю экземпляр объекта без добавления его на сцену. В самом объекте создал статическую переменную и пытаюсь ее заполнить 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);*/ } } } Да еще возможно как то влияет что при загрузке внешней флэшки в качестве главного используется класс наследник от _LoadViewer ![]() Добавлено через 37 часов 13 минут Ну вот нашел у MerlinTwi в Tips метод как создать дупликат дисплэй объекта. 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; } } }
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ Последний раз редактировалось SunShadow; 12.11.2008 в 09:04. |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:36. |
|
|
« Предыдущая тема | Следующая тема » |
|
|