Динамическое изменение цвета в AS1 - PullRequest
0 голосов
/ 29 апреля 2009

Я не могу заставить это работать в моем приложении AS1. Я использую метод Color.setTransform.

Правильно ли я считаю, что создание следующего объекта должно привести к преобразованию цвета в белый?

var AColorTransform = {ra: 100, rb: 255, ga: 100, gb: 255, ba: 100, bb: 255, aa: 100, ab: 255};

А этот чёрный?

AColorTransform = {ra: 100, rb: -255, ga: 100, gb: -255, ba: 100, bb: -255, aa: 100, ab: -255};

Я читал на некоторых веб-сайтах, что вызов setRGB или setTransform может не привести к реальному изменению цвета экрана, когда объект, над которым вы выполняете операцию, имеет какое-то динамическое поведение. Кто-нибудь знает больше об этих ситуациях? А как поменять цвет при любых обстоятельствах?

Привет.

1 Ответ

1 голос
/ 05 мая 2009

Прошло много времени с тех пор, как мне пришлось что-то делать, это AS1, но я сделаю все возможное.

Основной код для color.setTransform () выглядит следующим образом ...

var AColorTransform = {ra:100, rb:255, ga:100, gb:255, ba:100, bb:255, aa:100, ab:255};
var myColor = new Color(mc);
myColor.setTransform(AColorTransform);

... где mc - мувиклип где-то на сцене.

Помните, что вы спрашиваете о преобразовании , которое по своей природе предназначено для преобразования цветов из в то, что они являются в чем-то другим. Если вы хотите надежно рисовать определенным цветом (например, черным или белым), вам, как правило, гораздо лучше использовать setRGB, который будет выглядеть следующим образом:

var myColor = new Color(mc);
//set to black
myColor.setRGB(0x000000);
//or set to white
myColor.setRGB(0xFFFFFF);

Они работают надежно, хотя могут быть некоторые ошибки. Как правило, просто помните, что цвет прикреплен к определенному мувиклипу ... поэтому, если этот мувиклип выпадает из области видимости (т. Е. Исчезает с временной шкалы), ваш цвет будет удален вместе с ним.


Читайте дальше, только если вы хотите лучше понять преобразование цвета:

Давайте посмотрим на компоненты этого преобразования цвета.

    a (multiplier 0 > 100%)   b(offset -255 > 255)
r       ra                       rb

g       ga                       gb

b       ba                       bb

a       aa                       bb

Существует четыре канала (r, g, b и a). Первые три для красного, зеленого и синего, а последний для альфа (прозрачность). Каждый канал имеет компонент «a» и компонент «b», то есть ra, rb, ga, gb и т. Д. Компонент «a» представляет собой процентный множитель. То есть он будет умножать любой существующий канал на процент в этом значении. Компонент 'b' является смещением. Таким образом, 'ra' умножает существующий красный канал. 'rb' компенсирует это. Если ваш красный канал начинается с 'FF' (полный на красном), настройка ra: 100 не будет иметь никакого эффекта, так как умножение FF на 100% не приводит к изменениям. Точно так же, если красный начинается с «00» (вообще никакого красного), никакое значение «ra» не будет иметь никакого эффекта, поскольку (если вы вспомните своего Шекспира) дважды, ничто не будет ничем. Вещи между ними умножатся, как и следовало ожидать.

Смещения добавляются после умножения. Таким образом, вы можете умножить на некоторое значение, а затем сместить его:

r (result red color) = (RR * ra%) + rb
g (result green color) = (GG * ga%) + gb
b (result blue color) = (BB * ba%) + bb
a (result alpha) = (AA * aa%) + ab

пример: RR = 128 (гекс 0x80), ra = 50 (50% или .5), rb = -20

результирующий красный канал: (128 * .5) + (-20) = 44 (hex 0x2C)

Честно говоря, все это становится настолько запутанным, что я склонен предпочесть простоту здравого смысла - избегать преобразований в целом и использовать гораздо более простую setRGB ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...