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

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

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

Регистрация: Jul 2009
Сообщений: 95
По умолчанию Стейты у SimpleButton.

Здравствуйте. Объясните пожалуйста мне, тупице, следующие вопросы.

1. Предположим, у меня имеется некий SimpleButton, зашитый в FLA и с линкованный через Linkage.

Вот как я их создаю(упрощенно):

Код AS3:
var newButton:SimpleButton = new MyButton();//Создаемся
var copyButton:SimpleButton = new (Object(newButton)).constructor();//Клонируем.
Тут все понятненько, все стейты кнопки были заданы в редакторе и сам класс MyButton разруливает расстановку стейтов при пересоздании класса.

2. Я наткнулся на то, что мне нужно загружать кнопки извне. Я стал загружать спрайты и записывайть их в стейты, вот так:

Код AS3:
myButton.onUpState = loaderInfo.loader.content;
все ок, все шуршит и пашит. Но потом мне эти кнопке также понадобилось клонировать. К сожалению, первый вариант уже не катит, поскольку во втором случае уже используется не MyButton, описанный в FLA, а базовый SimpleButton и он не знает изначально, что у него внутри.

Поставил вот такой костыль:

copy.upState = new (Object(myButton.upState)).constructor()

Гы. Работает. Но первый вариант перестал работать с этой строчкой.
Стал рыться в отладчике. Может ещё что-нибудь сетать надо? Смотрю, у copy.upState есть свойство parent, равное самому myButton(т.е. хозяин у контрола остался тот же)

3. Я фшоке. Какие образом просетать в это поле(parent), если оно read-only, да ещё плюс к тому SimpleButton не является контейнером!

Что вы думаете по всему вышеописанному.

Старый 19.04.2010, 20:08
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Я думаю, что вы занимаетесь не тем, ибо прототипирование - это пережитки AS1, а в AS3 все визуальные объекты создаются по-нормальному, а не клонированием. Именно потому, что попытка клонирования вызывает проблемы, которые вы здесь описываете.
__________________
тонкий тролль, осеянный благодатью

Старый 19.04.2010, 20:18
tofflife вне форума Посмотреть профиль Отправить личное сообщение для tofflife Найти все сообщения от tofflife
  № 3  
Ответить с цитированием
tofflife

Регистрация: Jul 2009
Сообщений: 95
у меня нет прототипирования. у меня создаются все объекты через рефлексию вообще через getDefinitionByName.
Вот пример описания контрола:

<BankChestStrokeEvidence type="com.awem.visual.control.standart.impl.Image" owner="BankChest" resource="BankBandannaStrokeRes" x="25" y="3"/>

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS3:
var copyButton:SimpleButton = new (Object(newButton)).constructor();//Клонируем.
А это тогда... ммм к чему? Кривое "клонирование" через анус.

Код AS3:
var copyButton:SimpleButton = SimpleButton( new Object(newButton).constructor );// Вот клонируем, а не машем правой рукой.
Рефлексия, #@$%, у него.

Всю визуальную составляющую так не склонируете. getDefinition и далее по рефлексии.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 20.04.2010 в 02:45.
Старый 20.04.2010, 13:50
tofflife вне форума Посмотреть профиль Отправить личное сообщение для tofflife Найти все сообщения от tofflife
  № 5  
Ответить с цитированием
tofflife

Регистрация: Jul 2009
Сообщений: 95
К вашему сведению - getDefinitionByName и new (Object(newButton)).constructor()
работают по одному принципу.
Второй пример работает гораздо быстрее, поскольку отсуствуют затраты на получение полного имени ресурса.

"Всю визуальную составляющую так не склонируете."
Ошибаетесь. Класс полностью воссоздает начальное состояние картинки.

Хотя это я тут немного неправильно написал. Это, скорее, не клонирование текущего состояния объекта, а клонирование его начального состояния, описанного в FLA.

Добавлено через 4 минуты
var copyButton:SimpleButton = SimpleButton( new Object(newButton).constructor )

Ну и на кой ляд мне делать лишнее преобразование к SimpleButton, когда я могу вызвать напрямую конструктор, возвращающий SimpleButton?!

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Ого, конструкторы уже возвращают что-то.. )

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Надо тестить, Тигра. Вдруг что вернут.

2 tofflife
Фраза "Всю визуальную ....". Означала, что кроме шейпов, созданных в authority-mode, в DisplayObject/DisplayObjectContainer могут быть и детки по-серьезнее.

Добавлено через 1 минуту
Цитата:
Сообщение от tofflife Посмотреть сообщение
К вашему сведению - getDefinitionByName и new (Object(newButton)).constructor()
Ах, да! Я приму это к сведению, спасибо ))
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Код AS3:
var tmp1:TestClass = new TestClass();
			var tc:TestClass = tmp1["constructor"] as TestClass;
			trace(tc);
			var func:Function = tmp1["constructor"] as Function;
			trace(func);
 
			trace(tmp1["constructor"]);
null
null
[class TestClass]

Это не функция/метод и не класс. Судя по всему, это геттер, и что-то он возвращает. Похоже был не прав по поводу того, что конструктор ничего не возвращает...

Старый 22.04.2010, 17:34
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 9  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Код AS3:
var tmp:TestClass = new TestClass();
trace(tmp["constructor"] as Class); // [class TestClass]
Риальне... Накинулись на человека, а он прав оказался, хоть и по-извратски)
__________________
тонкий тролль, осеянный благодатью

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Ну, конструктор по идее ничего возвращать и не должен - не это у него предназначение. Конструктор определяется как метод, в общем то говоря - а я вверху показал что это геттер. Значит, по сути дела конструктор класса и object.constructor это разные вещи. И вот object.constuctor что-то возвращает - судя по всему, экземпляр класса или сам класс
Код AS3:
trace(typeof tmp1["constructor"]);
//object
Но я почти уверен, что автор говоря о конструкторе имел ввиду именно тот самый конструктор, что метод.

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

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

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


 


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


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