PicLens in Flash con Papervision3D 2.0: parte II

Martedì 17 Giugno, 2008

Questa volta (vedi Piclens in Flash con Papervision3D 2.0) pubblico il codice (PicLens.as), ho dovuto rivedere alcune parti di codice, allineandomi così agli ultimi rilasci di Papervision3D 2.0 Great White ed ho eseguito alcuni aggiustamenti e aggiunte. Ho inserito in questa demo anche una serie di Knob, manopole, per modificare runtime alcuni parametri.

Simulazione del moto PicLens

Per avvicinarmi il più possibile al movimento orizzontale di PicLens originale, ho usato un piccolo stratagemma inserendo un "non visibile" DisplayObject3D come target per la camera:

Actionscript:
  1. __fooTarget = new DisplayObject3D();
  2. ...
  3. __bv.cameraAsCamera3D.target = __fooTarget;

In pratica la camera punta sempre il DisplayObject3D posto dietro la serie di immmagini. Quando la camera si muove (con un movimento accelerato/inerziale) anche il DisplayObject3D la segue, ma con un leggero ritardo. Questo mi ha permesso di rendere l'effetto di moto morbido e del tutto simile a quello realizzato su PicLens originale:

Actionscript:
  1. __bv.cameraAsCamera3D.x += (( __slider.Value - __bv.cameraAsCamera3D.x)/10)/2.2;
  2. __fooTarget.x += (( __slider.Value - __fooTarget.x)/5)/2.2;

Non ho utilizzato nessun Tween, ma una più semplice e performante funzione:

CODE:
  1. posizione += ((posizionefinale - posizione)/accelerazione)/inerzia;

Nel demo è possibile modificare alcuni parametri: focus, zoom e target. Quest'ultimo è la posizione del DisplayObject3D rispetto alle 99 immagini! Modificando questa posizione si noteranno cambiamenti nel movimento dell'intera scena.
Focus e Zoom sono invece proprietà dell'ambiente Papervision3D.

Interazione

Provate a cliccare sulle immagini... ;)

Post correlati

Creare un preloader generico in Actionscript 3.0

Lunedì 16 Giugno, 2008

Potrebbe sembrare un argomento scontato e ormai esaurito, eppure con Flash CS3 e la nuova gestione della classi documento (package) permesse con Actionscript 3.0, non è del tutto immediato creare un preloader funzionante. L'ultima release di Flash, infatti, gestisce il caricamento del filmato in modo diverso dalle precedenti versioni. In rete potrete trovare diverse proposte e soluzioni per ricreare un preloader "vecchio stampo". Tuttavia i vari esempi che ho trovato non mi soddisfano pienamente in quanto richiedono di alterare il filmato in modo da farlo funzionare come un preloader classico. In pratica quando si sviluppa bisogna sempre rammentare "questa cosa la devo fare così altrimenti il preload non funziona"! E per i filmati già compilati, poi?

Loader

La soluzione che ho adottato, almeno per adesso, è stata quella di creare un filmato esterno (il mio loader - vedi esempio) in grado di caricare qualsiasi altro filmato esterno, compresa un'immagine! Questa soluzione, nonostante richieda in pratica due filmati (il loader e il filamato vero e proprio), diventa economica solo se si riesce a creare un loader in grado di essere usato più e più volte; cioè in grado di caricare qualsiasi filmato, a qualsiasi risoluzione e a qualsiasi framerate.

Continua a leggere... »

Post correlati

Reflex e ReflexMe: da Classe base a Classe

Venerdì 13 Giugno, 2008

Nel post Flash CS3: creare un effetto Reflex su qualsiasi MovieClip avevamo visto com'è possibile scrivere una classe, che estende un MovieClip, per collegarla a DesignTime ad un qualsiasi MovieClip in libreria. Ho scoperto, tuttavia, che può risultare più utile ed economico fare il percorso contrario. Ho creato una classe Reflex (Reflex.as), con l'intenzione di usarla esclusivamente da codice. Ho creato questa classe pensando di passare nel costruttore il puntatore ad un MovieClip. La nuova classe Reflex contiene in sostanza lo stesso codice prima inserito nella ReflexMe, ma leggermente modificato in modo da poter funzionare espressamente da codice:

Actionscript:
  1. //
  2. import undolibrary.sfx.*;
  3. //
  4. var rx:Reflex = new Reflex( movieClipInstance );

Continua a leggere... »

Post correlati

3D CountDown con FIVe3D

Giovedì 12 Giugno, 2008

Ho scritto una classe CountDown per Actionscript 3.0. Per provarla ho creato un esempio sfruttando le capacità di rendering testuale di FIVe3D.

Clicca per aprire il filmato Flash

Download sorgente

Il sorgente countdown.zip comprende sia la classe CountDown che l'esempio (CountDownDemo) in 3D scritto FIVe3D. Nell'esempio proposto è anche possibile modificare la data finale tramite un campo testo editabile. La classe CountDown verrà inserita quanto prima in Undolibrary.

Continua a leggere... »

Post correlati

Argomenti variabili in Actionscript 3.0

Mercoledì 11 Giugno, 2008

Nel post Argomenti variabili e di default in Javascript, Actionscript e PHP avevo esposto l'uso delle tecniche di passaggio di parametri variabili e di default. Aggiungo, ora, che in Actionscript 3.0 è stata introdotta una nuova dichiarazione di parametro in grado di specificare un parametro array che accetta un qualunque numero di argomenti separati da virgola: ... (rest)

Actionscript:
  1. function sampleFunction(... mioarr):void {
  2.     for (var i:uint = 0; i < mioarr.length; i++) trace( mioarr[i] );
  3. }
  4.  
  5. sampleFunction(8, 16, 32);
  6.  
  7. // output:
  8. // 8
  9. // 16
  10. // 32

Questa tecnica non sostituisce l'uso dell'oggetto arguments, ma è utile nelle dichiarazioni di classi dove in mancanza di parametri Actionscript genera un errore. Inoltre, come indicato nel manuale:

Il parametro (rest) può avere qualsiasi nome che non corrisponda a una parola riservata e deve essere l'ultimo parametro specificato. L'uso di questo parametro rende indisponibile l'oggetto arguments. Anche se il parametro ... (rest) offre la stessa funzionalità dell'array arguments e della proprietà arguments.length, non fornisce invece una funzionalità simile a quella di arguments.callee. Prima di usare il parametro ... (rest), assicurarsi che non sia necessario utilizzare arguments.callee.

Inoltre è possibile utilizzare questa tecnica insieme alle dichiarazioni standard:

Actionscript:
  1. function sampleFunction(a:String, b:int, ... mioarr) {
  2.     for (var i:uint = 0; i < mioarr.length; i++) trace(args[i]);
  3. }
  4.  
  5. sampleFunction(4096, 16384, 128);
  6.  
  7. // output:
  8. // 16384
  9. // 128

Post correlati

Papervision3D: effetti con perlinNoise()

Lunedì 9 Giugno, 2008

Sfruttando l'effetto generato da perlinNoise() è possibile creare effetti di increspatura e onde con Papervision3D.

Scarica il sorgente

Per compilare il sorgente avete bisogno sia di Papervision3D che di Undolibrary - che ora potete trovare come pacchetto ZIP direttamente nella sezione Download di Google Code.

Post correlati

Esperimenti con DisplacementMapFilter e perlinNoise()

Venerdì 6 Giugno, 2008

Introduco oggi un argomento interessante e vasto che ha il suo “core” nell’uso della classe DisplacementMapFilter. Questa classe permette di applicare un Filtro mappa di spostamento ad un oggetto visuale Flash (Bitmap, Sprite, etc…). Di filtri, Flash CS3, ne ha vari ed appartengono tutti alla stessa famiglia. Tuttavia il DisplacementMapFilter ha caratteristiche davvero particolari, come vedreno, che lo rendono straordinario nella generazione di effetti davvero spettacolari.

DisplacementMapFilter - clicca per aprire il filmato Flash

DisplacementMapFilter - clicca per aprire il filmato Flash

Scarica il sorgente

Continua a leggere... »

Post correlati

Actionscript 3.0: public, protected, private e internal

Giovedì 5 Giugno, 2008

Con AS3 sono state introdotte nuove "istruzioni" per definire proprietà e metodi (pubblici o privati). Alcune, come private – già presente in AS2 – ha cambiato comportamento (private si comportava in AS2 come ora si comporta protected, in AS3 private è davvero "privata"!) proprio a causa dell’introduzione di una sintassi più OO rispetto alle precedenti versioni. Meglio schematizzare, quindi, dalla più "pubblica" alla più "privata":

  • public
    tutti possono accedervi
  • protected
    vi può accedere la classe madre e le sottoclassi
  • private
    solo la classe che definisce
  • internal
    solo all’interno dello stesso package

Post correlati

Flash CS3: creare un effetto Reflex su qualsiasi MovieClip

Mercoledì 4 Giugno, 2008

Sfruttando 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.

Loading Flash Player...

Il sorgente fa parte del pacchetto undolibrary - presente su GoogleCode - ma se volete potete scaricare il singolo file ReflexMe.as.

Continua a leggere... »

Post correlati

Effetti sulle Bitmap con perlinNoise()

Lunedì 2 Giugno, 2008

La classe BitmapData permette di applicare in modo semplice effetti utilissimi per svariati scopi. Avevamo già visto come creare un effetto "nebbia tv" con poche righe di codice (Flash CS3: creare effetto nebbia TV in 1 secondo). Ora ci occuperemo di un altro effetto "spettacolare" che, come vedremo in seguito, permette di realizzare degli interessantissimi effetti grafici, come nell'esempio mostrato qui sotto: variate i parametri per osservare i differenti effetti, cliccando con il mouse sull'immagine generata questa può essere spostata.

Loading Flash Player...

Per l'occasione ho anche aggiunto un nuovo semplice componente (Check) in Undolibrary! Quindi aggiornate il vostro repository SVN. Il sorgente è disponibile qui: MapEffect.zip

Continua a leggere... »

Post correlati