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

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

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

Регистрация: Mar 2009
Сообщений: 65
Attention Копирование загруженных объектов

Нашел на этом форуме 2 варианта решения проблемы копирования загруженных *.swf-ок:
1. Сохранять byteArray загруженного объекта. Потом загружать содержимое используя этот byteArray.
Код AS3:
...
var bytes:ByteArray = startloader.contentLoaderInfo.bytes;
...
secondLoader.loadBytes(bytes);
Не подходит, так как очень медленный, мне необходимо последовательно создать очень большое количество одинаковых объектов (около тысячи, возможно и больше).
2. С помощью конструктора советовал человек: http://www.flasher.ru/forum/showthre...2%FC+%E7%E0%E3 то есть:
Код AS3:
var copy:* = new (loader.content["constructor"] as Class);
В этом случае создается объект и даже нужного типа, но этот объект совершенно пустой...такое ощущение что отработал тупо new MovieClip();

Может быть кто-нибудь подскажет другие способы клонирования? Или же я что то сделал не правильно? Приложил мой тестовый пример CS5:
Вложения
Тип файла: zip copiesLoaded.zip (9.5 Кб, 13 просмотров)

Старый 08.01.2011, 03:46
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 2  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Тут не у всех есть CS5. А создать класс который будет в загружаемом swf это не выход? Создавайте сколько хотите экземпляров нужного вам класса, зачем какие-то копирования.

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Не могу что-то придумать, зачем нужно клонировать загруженные swf.

Старый 08.01.2011, 13:27
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
@mikhailk, например внешнее облачко с анимацией.

@Gogan,
Код AS3:
loader.contentLoaderInfo.applicationDomain.getDefinition("Your class name") as Class;

Старый 08.01.2011, 13:40
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 5  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
ну да, я об этом и говорю.
это уже не первая тема, в которой автор пытается клонировать экземпляры объектов, вместо того, чтобы порождать новые объекты необходимого класса.

Старый 08.01.2011, 14:55
Gogan вне форума Посмотреть профиль Отправить личное сообщение для Gogan Найти все сообщения от Gogan
  № 6  
Ответить с цитированием
Gogan

Регистрация: Mar 2009
Сообщений: 65
Задача такова: сделать игрушку, в которой будет куча предметов, которые может покупать пользователь и он может покупать предметы одного вида (тут и нужно копирование). А дизайнер создает эти предметы. Таким образом необходимо было максимально облегчить работу для дизайнера. То есть до следующих шагов: 1.нарисовал новый предмет, 2. внес его в базу данных, всё. Конечно можно было создавать в библиотеке объект и по имени генерить сколько угодно копий, но как дальше? Допустим я загрузил новый предмет и у него в библиотеке лежит объект с именем Name1 , главное приложение то должено знать имя этого класса. Можно выкрутится и после загрузки, загружаемой флешкой пробрасывать евент с именем класса, и регистрировать объект в главном приложении, ну а потом делать копии. Но как то на мой взгляд много действий...
Наверно оставлю вариант от Psycho Tiger:
Код AS3:
var copy:* = new (loader.content["constructor"] as Class);
Только при создании нового объекта, приложение необходимо будет связывать с одним и тем же классом :
Код AS3:
package 
{
	import flash.display.MovieClip;
 
	public class TEST extends MovieClip
	{
		public function TEST()
		{
 
		}
	}
}

Старый 08.01.2011, 15:21
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 7  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Все понятно.
Это делается не так.

Дизайнеры рисуют айтемы, оформляют их как мувики во внешних библиотеках (fla). При этом они задают для произведенных мувиклипов имена классов в соответствии со спецификацией, которую им выдают. "Item_001","Item_002" и т.д., например.

Приложение при загрузке получает данные о всех айтемах (напр, грузит xml-файл) и грузит необходимые библиотеки (в крупных приложениях библиотек много и грузятся они постепенно, по мере необходимости). Для хранения всех загруженных библиотек обычно организуют отдельный класс, который имеет метод, возвращающий класс по строковому параметру (имени класса) или сразу объект.

Логика такая:

Код AS3:
private var library:Object;
 
// Получение библиотеки после загрузки:
private function onLoadingComplite(e:Event) : void
{
   var loader:Loader = Loader(e.target.loader);
   library = loader.contentLoaderInfo.applicationDomain.getDefinition;
}
 
// Выдача класса по запросу
public function getClassByName(className:String) : Class
{
   return ( library(className) as Class );
}

В функции getClassByName еще надо добавить обработку ошибок, но логика такая


Последний раз редактировалось mikhailk; 08.01.2011 в 15:25.
Старый 08.01.2011, 18:36
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
Наверно оставлю вариант от Psycho Tiger
Оу...
Тогда лучше пишите Object(loader.content).constructor. Так по стандарту =)
Не помню чем я руководствовался когда давал тот совет.

А вообще конкретно в Вашем случае неплохо было бы плюсануть в карму etc и использовать его функцию getDefinitionNames, полностью автоматизировав процесс на своей стороне.

Старый 08.01.2011, 18:58
Dron1564 вне форума Посмотреть профиль Отправить личное сообщение для Dron1564 Найти все сообщения от Dron1564
  № 9  
Ответить с цитированием
Dron1564

Регистрация: Oct 2010
Сообщений: 69
Возможно я чего то не понимаю... а вот это разве не выход... ( + к верхнему посту )...

Код AS3:
public function duplicateItem(obj:*):*
{
    var className:String = getQualifiedClassName(obj).split('::').join('.');
    var ClassRef:Class = getDefinitionByName(className) as Class;
    var item:* = new ClassRef();
    return item;
}

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

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

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


 


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


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