Domanda

Non riesco a farlo funzionare nella mia applicazione AS1. Sto usando il metodo Color.setTransform.

Sono corretto nel pensare che la seguente creazione di oggetti dovrebbe comportare la trasformazione di un colore in bianco?

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

E questo al nero?

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

Ho letto su alcuni siti Web che la chiamata di setRGB o setTransform potrebbe non comportare effettivamente la modifica del colore di visualizzazione quando l'oggetto su cui si sta eseguendo l'operazione ha un comportamento dinamico. Qualcuno sa di più su queste situazioni? E come cambiare il colore in ogni circostanza?

Saluti.

È stato utile?

Soluzione

È passato molto tempo da quando ho dovuto fare qualsiasi cosa è AS1, ma farò del mio meglio.

Il codice di base per color.setTransform () è simile a questo ...

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

... dove mc è un MovieClip sul palco da qualche parte.

Ricorda che stai chiedendo di trasforma , che per sua natura intende trasformare i colori da da cosa sono a qualcos'altro. Se vuoi dipingere in modo affidabile in un colore specifico (come il bianco o il nero), di solito stai molto meglio usando setRGB, che sarebbe simile a questo:

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

Funzionano in modo affidabile, anche se possono esserci dei trucchi. In generale, ricorda solo che il colore è attaccato al MovieClip specifico ... quindi se quel MovieClip non rientra nell'ambito (cioè scompare dalla sequenza temporale) il tuo colore verrà eliminato con esso.


Leggi oltre solo se vuoi capire meglio la trasformazione del colore:

Diamo un'occhiata ai componenti di quella trasformazione di colore.

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

g       ga                       gb

b       ba                       bb

a       aa                       bb

Vi sono quattro canali (r, g, b e a). I primi tre sono per il rosso, il verde e il blu e l'ultimo per l'alfa (trasparenza). Ogni canale ha un componente 'a' e un componente 'b', quindi ra, rb, ga, gb, ecc. Il componente 'a' è un moltiplicatore percentuale. Cioè, moltiplicherà qualsiasi canale esistente per la percentuale in quel valore. Il componente 'b' è un offset. Quindi 'ra' moltiplica il canale rosso esistente. 'rb' lo compensa. Se il tuo canale rosso inizia come 'FF' (pieno su rosso), l'impostazione ra: 100 non avrà alcun effetto, poiché la moltiplicazione di FF per il 100% non comporta alcun cambiamento. Allo stesso modo, se il rosso inizia da '00' (nessun rosso), nessun valore di 'ra' avrà alcun effetto, poiché (se ricordi il tuo Shakespeare) due volte nulla è ancora nulla. Le cose nel mezzo si moltiplicheranno come ti aspetteresti.

Gli offset vengono aggiunti dopo la moltiplicazione. Quindi puoi moltiplicare per un valore, quindi 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

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

canale rosso risultante: (128 * .5) + (-20) = 44 (hex 0x2C)

Francamente, tutto diventa così confuso che tendo a preferire la semplice sanità mentale di evitare del tutto le trasformazioni e andare con il setRGB () molto più semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top