![]() |
MovieClip: Меню Color в Properties
Вложений: 1
У Мувиклипа в "Свойствах" есть такое меню:
Вложение 30028 Но ведь у класса MovieClip нет ни свойства ни метода color. И у суперклассов вверх по цепочке наследования тоже, вроде бы нет. Тогда что это, и как к нему программно обратиться? |
Зато есть свойство .transform, в котом есть свойство .colorTransform (ColorTransform), которое определяет оттенок выбранного DO)
|
Да, глубоко жёлуди зарыты, спасибо. )
А как же тогда быть, в самом простом случае? Ну вот есть, например, мувик mc1. Просто через каскад точек врядли-же можно обратится к этому colorTransform, верно? Нужно, скорее всего, вводить новые экземпляры каких-то промежуточных классов, ну что-то навроде того, как мы действует с TextFormat. |
Да, придется создавать новый ColorTransform объект. Но это довольно приемлимо, если не предполагается создавать анимацию
Код AS3:
|
KumoKairo, спасибо за пример.
Кстати, по нажатию кнопки, как я понимаю, каждый раз создается новый экземпляр ColorTransform? Это нормально? То есть, выходит мы плодим множество экземпляров, которые накапливаются в памяти. А гарбадж-коллектор не замучается их зачищать, dimarik благославляет такой подход? ))) Просто интересно, почему нельзя было просто создать один экземпляр, и в нем менять значения. Про анимацию тоже хотел уточнить, но пока не буду. Видимо нельзя этот подход для твинов применять. |
Нет, это не нормально, я всеми руками за пулинг)
Пример не мой, а с сайта адобовского Я бы поправил и сделал бы так: Код AS3:
|
Хм, я вот тут подумал побольше над примером...
И понял, что не догоняю некоторых вещей. 1. Получается, что у нас target напрямую никак с colorTransformInstance и не связан. То есть, в функции clickHandler этот экземпляр просто сам-на-сам отрабатывает, и всё. 2. Меня не перестает смущать волшебное слово this. Вот и тут... Как его понимать? Наверное, как-то так: "Берем экземпляр класса ColorTransformExample, добираемся до его свойства colorTransform и присваиваем этому свойству экземпляр colorTransformInstance." Хм, ну и... в чем смысл? Причем, мы ведь даже этот экземпляр this не добавляли посредством addChild. 3. Кстати, когда мы написали addChild(target), мы ведь добавили target в экземпляр класса ColorTransformExample, но не на экран, так? |
Ну тут таргет видимо в виде локальной переменной для простоты сделан, это не критично на самом деле. Графику мы рисуем поверх основного спрайта, тинт применяется на все DO внутри спрайта.
Цитата:
Ключевое слово this. просто указывает на то, что нужно вызвать функцию самого класса ColorTransformExample, в данном случае для понятности просто используется. Что меняем трансформ самого контейнера, а не того объекта, который кликнули. Цитата:
Каждый раз переприсваивать приходится из-за реализации внутреннего сеттера скорее всего, иначе он не обновит внешний вид. Наверное что-то по принципу валидейт-инвалидейт. Цитата:
|
Перефразирую то, как я понимаю ход этой программы, с учетом ваших замечаний:
1. Экземпляр класса ColorTransformExample наследует Sprite, и значит автоматически является свойством DisplayObject, и значит автоматически отображается на экране. (Не совсем ясно, по идее для отображения, мы должны написать еще и addChild(this) но этого в коде нет). 2. В конструкторе класса создаем спрайт target и добавляем его в... экземпляр класса ColorTransformExample, вследствие чего он автоматически отображается на экране. (Хотя не очень понятно, почему это так, ведь как замечено в п1, мы не добавляли сам экземпляр ColorTransformExample никуда) 3. Далее в функции clickHandler мы в конечном счете присваиваем заново отформатированный экземпляр colorTransformInstance свойству colorTransform экземпляра ColorTransformExample, чем добиваемся смены цвета на экране. Ну, здесь вроде всё понятно. |
Цитата:
Автоматически на экране отображается только класс документа, все остальное нужно добавлять с помощью .addChild(...) Цитата:
Еще раз повторюсь - класс ColorTransformExample предполагается как класс документа, он добавляется на экран автоматически. Если у вас другой класс документа, то нужно добавить экземпляр этого класса вручную. Цитата:
|
| Часовой пояс GMT +4, время: 16:36. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.