Flash CS3: creare un effetto Reflex su qualsiasi MovieClip
mercoledì 4 giugno, 2008Sfruttando una notevole caratteristica di Actionscript 3.0 (vedi Actionscript 3.0: tutto con l'operatore new) ho creato una classe ReflexMe in grado di generare un effetto "riflessione" su un qualsiasi MovieClip presente in libreria.
Il sorgente fa parte del pacchetto undolibrary - presente su GoogleCode - ma se volete potete scaricare il singolo file ReflexMe.as.
Utilizzo
Scaricate il file ReflexMe.as e posizionatelo nella cartella del vostro filmato .fla. Selezionate nella libreria il MovieClip a cui volete applicare l'effetto reflex e aprite la finestra delle proprietà simbolo. Nella sezione Concatenamento inserite ReflexMe nel campo Classe base:

A questo punto, provando il filmato, il MovieClip selezionato avrà l'effetto reflex. Se al MovieClip date un nome di istanza potrente anche regolare alcuni parametri come:
- reflexOffset - distanza del riflesso
- gradientOffset - l'estenzione del gradiente riflesso
- alphaOffset - il canale alpha del riflesso
- gradientRadial - tipo di riflesso: radiale o lineare
Note
La classe ReflexMe.as è scritta come classe base per estendere un qualsiasi MovieClip. La sua semplicità è tale e disarmante che potete riaddatarla anche come codice "spurio" da utilizzare da codice, invece che dall'IDE Flash. Tutto l'effetto è generato dalle poche (tolti i commenti) righe di codice che seguono:
-
// preservo le dimesioni orginali del MovieClip
-
__oWidth = this.width;
-
__oHeight = this.height;
-
// creo una BitmapData delle dimesioni del
-
// MovieClip a cui voglio applicare l'effetto reflex
-
// copio il MovieClip sulla BitmapData
-
__bmpd.draw( this );
-
// creo un oggetto Bitmap per la visualizzazione
-
// questo sarà il nostro effetto reflex
-
// lo visualizzo
-
addChild( __bmp );
-
// lo ruoto di 180 gradi: lo inverto
-
__bmp.scaleY = -1;
-
// lo posiziono alla base del MovieClip oroginale
-
// il x 2 sull'altezza è necessario a casua della
-
// rotazione che ha spostato l'origine degli assi
-
__bmp.y = __oHeight*2 + __reflexOffset;
-
// cache come bitmap: necessario per mascherare dopo
-
// con effetto gradiente e alpha channel
-
__bmp.cacheAsBitmap = true;
-
// creo una maschera
-
// cache come bitmap: necessario per mascherare dopo
-
// con effetto gradiente e alpha channel
-
__mask.cacheAsBitmap = true;
-
// posiziono anch'essa sopra l'immagine riflessa
-
__mask.y = __oHeight + __reflexOffset;
-
// creo una matrice per il gradiente
-
// creo il gradiente delle stesse dimensione del
-
// MovieClip originale
-
with( __mask.graphics ) {
-
clear();
-
beginGradientFill( GradientType.LINEAR, [0x000000,0x000000], [__alphaOffset, 0], [0, __gradientOffset], __matrix);
-
drawRect(0, 0, __oWidth, __oHeight);
-
endFill();
-
}
-
addChild( __mask );
-
// imposto maschera
-
__bmp.mask = __mask;











5

ciao ho provato ha utilizzare questa classe ma mi da degli errori.
ti dico il procedimento che ho fatto, cosi magari mi puoi dire se, e dove sbaglio.
-creo un nuono documento in as3,
-disegno un semplice quadrato, e lo trasformo in movieclip;
-nella libreria tasto destro sul simbolo, nella sezione Concatenamento inserisco ReflexMe nel campo Classe base;
-logicamente ho salvato il file fla nella stessa cartella dove si trova ReflexMe.as
però mi da questi errori:
-errore 1017 impossibile trovare la definizione della classe base ReflexMe;
-5000: La classe 'ReflexMe' deve essere una sottoclasse di 'flash.display.MovieClip' perché è collegata a un simbolo di libreria di quel tipo;
-5001: Il nome del pacchetto 'undolibrary.sfx' non riflette la posizione del file. Modificare il nome della definizione del pacchetto all'interno del file o spostare il file. C:\Documents and Settings\Utente\Desktop\ReflexMe.as
dove sbaglio? cosa devo fare??
ti ringrazio in anticipo.
ciao!
@Marco: se usi il file ReflexMe.as al di fuori della libreria undolibrary devi modificare il "namespace" del package. All'inizio del file trovi "package undolibrary.sfx", elimina il namespace "undolibrary.sfx", in pratica lascia solo "package {" - con la graffa
[...] post Flash CS3: creare un effetto Reflex su qualsiasi MovieClip avevamo visto com'è possibile scrivere una classe, che estende un MovieClip, per collegarla a [...]
Complimenti per il sito web meraviglioso. Volevo sapere se ho dato un nome istanza al mio movieclip come posso accedere alle proprietà
reflexOffsetetc.Grazie
@Linus: puoi utilizzare
miaistanza.reflexOffsetper accedere a tutte le proprietà. Quando usi la classeReflexestendi, di fatto, le caratteristiche del MovieClip base. Questo significa che il MovieClip ottiene tutte le proprietà e i metodi della classeReflex.Ciao a tutti quelli che stanno leggendo il mio messaggio. Volevo chiedere a qualcuno di voi, se mi insegnaste come creare i sottomenu su flash cs3. Io ho cercato su internet, ma non so come si faccia. Per favore mi potreste aiutare? Il mio contatto è: sicilianofolle@hotmail.it
attendo in molti grazie!
@Carlitos: esattamente cosa ti serve?
@Giovambattista Fazioli:
1017: Impossibile trovare la definizione della classe base Reflex.
5000: La classe 'ReflexMe' deve essere una sottoclasse di 'flash.display.MovieClip' perché è collegata a un simbolo di libreria di quel tipo.
sono gli errori nel tentativo help please
grazie alberto
@alberto: devi posizionare la classe Reflex (il punto .as) nella stessa cartella del tuo .fla
@Giovambattista Fazioli: ovviamente era gia posizionato nella stessa cartella del mio fla.
@alberto: modifica l'inizio della classe:
in semplicemente:
@Giovambattista Fazioli: l avevo gia fatto risultato uguale