2009-04-29 8 views
0

Je n'arrive pas à faire fonctionner ceci dans mon application AS1. J'utilise la méthode Color.setTransform. Ai-je raison de penser que la création de l'objet suivant devrait entraîner la transformation d'une couleur en blanc? Var AColorTransform = {ra: 100, rb: 255, ga: 100, gb: 255, ba: 100, bb: 255, aa: 100, ab: 255};Changement dynamique de couleurs dans AS1

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 setTransform peut ne pas entraîner une modification de 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 la couleur en toutes circonstances?

Cordialement.

Répondre

1

Cela faisait longtemps que je n'avais rien à faire, mais je ferais de mon mieux.

Le code de base pour 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 sur la scène quelque part.

Rappelez-vous que vous demandez au sujet transformer, qui, par sa nature est destinée à transformer les couleurs de ce qu'ils sont - autre chose. Si vous voulez de manière fiable la peinture dans une couleur spécifique (comme le noir ou blanc), vous êtes généralement beaucoup mieux à l'aide setRGB, qui ressemblerait à ceci:

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

Ces travaux de manière fiable, mais il peut y avoir un certain Gotchas. Généralement, rappelez-vous simplement que la couleur est attachée au MovieClip spécifique ... donc si ce MovieClip tombe hors de la portée (c'est-à-dire qu'il disparaît de la timeline), votre couleur sera effacée avec.


Lire plus que si vous voulez comprendre la transformation des couleurs mieux:

Examinons les éléments de cette transformation de couleurs.

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. Le composant 'a' est un multiplicateur en pourcentage. Autrement dit, il multipliera tout canal existant par le pourcentage de cette valeur. Le composant 'b' est un décalage. Donc 'ra' multiplie le canal rouge existant. 'rb' le compense. Si votre canal rouge commence comme 'FF' (plein sur le rouge), le réglage de ra: 100 n'aura aucun effet, puisque multiplier 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 vous vous souvenez de votre Shakespeare) deux fois rien n'est encore rien. Les choses entre les deux vont se multiplier comme on s'y attendrait.

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

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 (0x80 hexadécimal), ra = 50 (50% ou 0,5), rb = -20

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

Franchement, tout cela devient si déroutant que j'ai tendance à préférer la simple raison d'éviter complètement les transformations et d'aller avec le setRGB beaucoup plus simple ().

+0

'Ceux-ci fonctionnent de manière fiable, bien qu'il puisse y avoir quelques pièges.' J'espère que vous voyez l'incohérence dans cette phrase :-) Grande réponse tout à fait cependant! J'ai essayé d'utiliser setRGB, mais cela n'a pas fonctionné. J'ai donc passé à setTransform, que je n'ai pas encore réussi à utiliser. Je ne pense pas que ce soit dans la commande mais probablement dans la référence au MovieClip. Je pense que la façon dont j'essaye de le faire fonctionnerait dans n'importe quelle autre langue, mais cela ne fonctionne pas dans AS1 ... Merci! – JurgenW

Questions connexes