Вопрос

Я не могу заставить это работать в моем приложении 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, но я сделаю все, что в моих силах.

Базовый код для функции 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);

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


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

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

    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 и т.д.Компонент "а" представляет собой процентный множитель.То есть он умножит любой существующий канал на процент от этого значения.Компонент "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 (шестнадцатеричный 0x2C)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top