Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.11.2008, 14:45
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 1  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Question Как создать новый объект?

Здраствуйте уважаемые.
Вопрос в следующем. Из флэшки подгружаю внешнюю флэшку(какую именно сам не знаю, выясняется это в процессе загрузки). Мне ее (эту внешнюю флэху) нужно по необходимости многократно добавлять в свой мувик. Как правильно это делать?
Вроде все должно быть просто, да вот как не ведаю.
Буду благодарен за любой толковый совет.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 10.11.2008, 14:47
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Сохранить ее как ByteArray (снять с LoaderInfo.bytes) и потом дублировать через Loader.loadBytes()
__________________
Hell is the possibility of sanity

Старый 10.11.2008, 14:59
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 3  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
А я думал это делается как то через классы и создание нового экземпляра. Вот только как получать экземпляр этого класса не очень представляю.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 10.11.2008, 18:03
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Мой вариант проще, кроме того, в загружаемой флешке могут быть классы которые можно создать всего 1 раз, и номер с повторным созданием не пройдет.
__________________
Hell is the possibility of sanity

Старый 10.11.2008, 19:00
smilenka вне форума Посмотреть профиль Отправить личное сообщение для smilenka Найти все сообщения от smilenka
  № 5  
Ответить с цитированием
smilenka
[+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 ) ;
}
определить имя класса можно методом getQualifiedClassName( object )


Последний раз редактировалось smilenka; 10.11.2008 в 19:29.
Старый 10.11.2008, 22:37
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 6  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Спасибо за советы, попробую и так и так)
Премного благодарен друзья

Добавлено через 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;
		}
	}
}
В принципе работает. Закоментил дублирование свойств потому что с ними попытка в адльнейшем взаимодействовать с обоими мувиками приводило в падению флэша.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ


Последний раз редактировалось SunShadow; 12.11.2008 в 09:04.
Создать новую тему Ответ Часовой пояс GMT +4, время: 09:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:36.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.