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

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

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

Регистрация: Aug 2012
Сообщений: 108
По умолчанию не могу клонировать объект 3мя разными способами

Пробую клонировать Sprite/MovieClip 3мя разными способами, ни один не срабатывает. Хотя в трейсе пишут, объект есть - ничего не отображается.

Код AS3:
	public function clone(object:Object):*
	{
		var byteArray:ByteArray = new ByteArray();
		byteArray.writeObject(object);
		byteArray.position = 0;
		return byteArray.readObject();
	}
 
var clone1:Sprite = clone(target);
addChildAt(clone1, numChildren);
тут уже тупо в кадре пишу по f9
Код AS3:
var target:DisplayObject = Symbol1;
var targetClass:Class = (target as Object).constructor;
var duplicate:DisplayObject = new targetClass();
addChild(duplicate);
duplicate.x = 20;
duplicate.y = 20;
trace("duplicate =",duplicate, duplicate.x, duplicate.y);
Symbol1.x = 200;
trace(getQualifiedClassName(duplicate));
Код AS3:
registerClassAlias("lolo", (targetClass));
var ClassReference:Class = getClassByAlias("lolo");
var activeTab:MovieClip = new ClassReference();
addChild(activeTab);
trace("activeTab =", activeTab);
Среды - flash pro cs 5.5, flashDevelop
Может быть, надо каким-то хитрым образом в классе прописать addChild?

Добавлено через 9 минут
трейсы 2, 3 кусков кода

Код:
duplicate = [object MovieClip] 20 20
flash.display::MovieClip
activeTab = [object MovieClip]

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Для того, чтобы создать несколько MovieClip с графикой, нарисованной во Flash CSx, нужно этому MovieClip прописать класс в библиотеке и создавать экземпляры этого класса. Иного способа нет.
__________________
...вселенская грусть

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Я предполагаю, что графику Shape, Sprite с любым графическим содержимым (authority и runtime) невозможно скопировать вышеназванными способами. Для копирования authority-sprites, не помеченных для экспортирования, подойдет разбор swf-тегов с последующим созданием виртуального SWF-файла и загрузкой через Loader#loadBytes(); Для содержимого, отрисованного в рантайме через super.graphics даже представления не имею.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 12.10.2012, 01:03
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 4  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Для содержимого, отрисованного в рантайме через super.graphics даже представления не имею.
Это можно сделать через Graphics.copyFrom. Но это будет только содержимое Graphics и никаких детей видно не будет. Вероятно, для authority-time graphics это тоже сработает, но только при определенных условиях (не используются дочерние символы, например).

Старый 12.10.2012, 05:49
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 5  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
Код AS3:
public function clone(object:Object):*
	{
		var byteArray:ByteArray = new ByteArray();
		byteArray.writeObject(object);
		byteArray.position = 0;
		return byteArray.readObject();
	}
давно уже задавался таким вопросом, и находил эту функцию, но как выяснилось она подходит только для простых объектов.
Решения тогда было отрисовывать все спрайты с помощью graphics и копированием ее же во вновь созданный спрайт с помощью метода Graphics.copyFrom. Если объекты сложные (несколько вложений) ,то проще не заморачиваться с копированием, а создавать новый экземпляр.

Старый 12.10.2012, 10:11
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Если объекты сложные (несколько вложений) ,то проще не заморачиваться с копированием, а создавать новый экземпляр.
А как быть, если полноценный экземпляр вы не можете создать? Смотрите: у вас на руках есть ссылка на экземпляр, предположим, что это простой наследник Shape, связанный с authority графикой. Класс этого экземпляра не помечен на экспорт. Ваши действия?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 12.10.2012, 12:23
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 7  
Ответить с цитированием
Psijic

Регистрация: Aug 2012
Сообщений: 108
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Для того, чтобы создать несколько MovieClip с графикой, нарисованной во Flash CSx, нужно этому MovieClip прописать класс в библиотеке и создавать экземпляры этого класса. Иного способа нет.
все это, конечно, очень клево, да вот только объект берется через 2 загрузчика swf

Кстати, во флексе есть ObjectUtil - там есть и clone и copy. Нельзя ли как-то это подключить во flash?

Добавлено через 2 часа 1 минуту
А если регистрировать класс, поможет? Что-то не могу подобрать что вставлять в getClassByAlias, registerClassAlias

Код AS3:
		var buffer:ByteArray = new ByteArray();
		var newClass:Class = getClassByAlias(String(value));
 
		registerClassAlias(String(newClass), value.constructor);
		buffer.writeObject(value);
		buffer.position = 0;
		return buffer.readObject();


Последний раз редактировалось Psijic; 12.10.2012 в 13:33.
Старый 12.10.2012, 16:06
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 8  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
Сообщение от Psijic Посмотреть сообщение
все это, конечно, очень клево, да вот только объект берется через 2 загрузчика swf
ну это как раз не очень страшно. Если с crossdomain.xml все в порядке, то никто не мешает вытащить ссылку на класс и создать его экземпляр:
Код AS3:
var MyClass:Class = loader.applicationDomain.getDefinition("className") as Class;
Могут быть проблемы с получением ссылки на сам loader, но это немного другая песня.
__________________
...вселенская грусть

Старый 12.10.2012, 17:01
Psijic вне форума Посмотреть профиль Отправить личное сообщение для Psijic Найти все сообщения от Psijic
  № 9  
Ответить с цитированием
Psijic

Регистрация: Aug 2012
Сообщений: 108
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
ну это как раз не очень страшно. Если с crossdomain.xml все в порядке, то никто не мешает вытащить ссылку на класс и создать его экземпляр:
какое-то извращение грузить ресурс по 2 раза. Лучше уж сделать отдачу переменной через return и какой-нибудь геттер или паблик или dispatchEvent

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Где вы увидели "грузить"? Я предлагаю из уже загруженной swf-ки получить ссылку на класс.
__________________
...вселенская грусть

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

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

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


 


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


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