Question

Je ne parviens pas à faire fonctionner cela dans mon application AS1. J'utilise la méthode Color.setTransform.

Ai-je raison de penser que la création d'objet suivante devrait permettre de transformer une couleur en blanc?

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

Et celui-ci au noir?

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

J'ai lu sur certains sites Web que l'appel de setRGB ou de setTransform peut ne pas avoir pour effet de changer la couleur d'affichage lorsque l'objet sur lequel vous effectuez l'opération a un comportement dynamique. Est-ce que quelqu'un en sait plus sur ces situations? Et comment changer de couleur en toutes circonstances?

Cordialement.

Était-ce utile?

La solution

Cela fait longtemps que je n'ai rien à faire, c'est AS1, mais je ferai de mon mieux.

Le code de base d'un color.setTransform () ressemble à ceci ...

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

... où mc est un MovieClip quelque part sur la scène.

N'oubliez pas que vous parlez de transformation , qui, de par sa nature, est destiné à transformer les couleurs de ce qu'elles sont en en quelque chose d'autre. Si vous souhaitez peindre de manière fiable dans une couleur spécifique (telle que le noir ou le blanc), il est généralement préférable d'utiliser setRGB, qui ressemble à ceci:

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

Celles-ci fonctionnent de manière fiable, bien qu’il puisse y avoir des pièges. En général, rappelez-vous simplement que la couleur est liée à un MovieClip spécifique ... ainsi, si ce MovieClip tombe en dehors de la portée (c’est-à-dire qu’il disparaît de la timeline), votre couleur sera supprimée avec elle.

Continuez à lire si vous voulez mieux comprendre la transformation des couleurs:

Regardons les composants de cette transformation de couleur.

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

g       ga                       gb

b       ba                       bb

a       aa                       bb

Il existe quatre canaux (r, g, b et a). Les trois premiers sont pour le rouge, le vert et le bleu et le dernier pour l'alpha (transparence). Chaque canal a une composante "a" et une composante "b", donc ra, rb, ga, gb, etc. La composante "a" est un multiplicateur de pourcentage. Autrement dit, tout canal existant sera multiplié par le pourcentage de cette valeur. La composante 'b' est un décalage. Donc 'ra' multiplie le canal rouge existant. 'rb' le compense. Si votre canal rouge commence par «FF» (plein sur le rouge), le réglage de ra: 100 n'aura aucun effet, car la multiplication de FF par 100% n'entraîne aucun changement. De même, si le rouge commence à '00' (pas de rouge du tout), aucune valeur de 'ra' n'aura d'effet puisque, si (si vous vous rappelez votre Shakespeare), rien ne sera toujours deux fois. Les choses entre les deux se multiplieront comme vous le souhaitiez.

Les décalages sont ajoutés après la multiplication. Donc, vous pouvez multiplier par une valeur, puis compenser:

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

exemple: RR = 128 (hex 0x80), ra = 50 (50% ou 0,5), rb = -20

canal rouge résultant: (128 * .5) + (-20) = 44 (hex 0x2C)

Franchement, tout cela est tellement déroutant que j'ai tendance à préférer le simple fait de ne pas transformer le tout et d'aller plutôt avec le beaucoup plus simple setRGB ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top