Pregunta

No puedo hacer que esto funcione en mi aplicación AS1. Estoy usando el método Color.setTransform.

¿Estoy en lo cierto al pensar que la siguiente creación de objetos debería resultar en la transformación de un color a blanco?

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

¿Y este al negro?

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

Leí en algunos sitios web que llamar a setRGB o setTransform puede no cambiar realmente el color de la pantalla cuando el objeto en el que realiza la operación tiene algún tipo de comportamiento dinámico. ¿Alguien sabe más sobre estas situaciones? ¿Y cómo cambiar el color en todas las circunstancias?

Saludos.

¿Fue útil?

Solución

Hace mucho tiempo que no tengo que hacer nada es AS1, pero haré lo mejor que pueda.

El código básico para un color.setTransform () se ve así ...

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);

... donde mc es un MovieClip en el escenario en algún lugar.

Recuerde que está preguntando acerca de transform , que por su naturaleza tiene la intención de transformar los colores de de lo que son a otra cosa. Si desea pintar de manera confiable en un color específico (como blanco o negro), generalmente es mucho mejor usar setRGB, que se vería así:

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

Estos funcionan de manera confiable, aunque puede haber algunas trampas. En general, solo recuerde que el color se adjunta al MovieClip específico ... por lo que si ese MovieClip cae fuera del alcance (es decir, desaparece de la línea de tiempo), su color se eliminará con él.


Siga leyendo solo si desea comprender mejor la transformación del color:

Veamos los componentes de esa transformación de color.

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

g       ga                       gb

b       ba                       bb

a       aa                       bb

Hay cuatro canales (r, g, by a). Los primeros tres son para rojo, verde y azul, y el último para alfa (transparencia). Cada canal tiene un componente 'a' y un componente 'b', por lo tanto ra, rb, ga, gb, etc. El componente 'a' es un multiplicador porcentual. Es decir, multiplicará cualquier canal existente por el porcentaje en ese valor. El componente 'b' es un desplazamiento. Entonces 'ra' multiplica el canal rojo existente. 'rb' lo compensa. Si su canal rojo comienza como 'FF' (lleno en rojo), establecer ra: 100 no tendrá ningún efecto, ya que multiplicar FF por 100% no produce ningún cambio. Del mismo modo, si el rojo comienza en '00' (sin rojo), ningún valor de 'ra' tendrá ningún efecto, ya que (si recuerda su Shakespeare) dos veces nada sigue siendo nada. Las cosas intermedias se multiplicarán como cabría esperar.

Las compensaciones se agregan después de la multiplicación. Entonces puede multiplicar por algún valor, luego compensarlo:

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

ejemplo: RR = 128 (hex 0x80), ra = 50 (50% o .5), rb = -20

canal rojo resultante: (128 * .5) + (-20) = 44 (hex 0x2C)

Francamente, todo esto se vuelve tan confuso que tiendo a preferir la cordura simple de evitar las transformaciones por completo y elegir el setRGB () mucho más simple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top