Articoli con Tag ‘Actionscript 3.0’
Riprendiamo il nostro codice di esempio del TicTacToe (che trovate per intero su Google Code) e iniziamo ad analizzarlo in dettaglio.
Importare le definizioni
Con Actionscript 3.0 è stato fatto un grande lavoro di pulizia e sistemazione nell’alberatura delle classi (contenute nei pacchetti, package) utilizzate durante lo sviluppo. In altri linguaggi di programmazione, come il C ad esempio, quando si desidera utilizzare una funzionalità bisogna esplicitamente “importarla” nel codice. Questa operazione di “importazione” è necessaria per permettere al compilatore di avere tutti i codici e le definizioni legate alla funzionalità che vogliamo usare. In Actionscript 3.0, tuttavia, l’istruzione import non va confusa con l’equivalente C/C++ #include; Actionscript 3.0 mette a disposizione l’istruzione include che è identica all’#include del C/C++. Quest’ultima, infatti, “include” effettivamente del codice che, se usato o meno, viene compilato nell’eseguibile finale. L’istruzione import è di più alto livello e risulta più “intelligente” in fase di compilazione. Essa serve principalemente per accedere alle classi senza doverne specificare il nome completo. In alre parole invece di usare forme del tipo:
Continua...
Continuiamo l’analisi dell’esempio del gioco Tic Tac Toe, presentato in Actionscript 3.0 for beginners: lesson #2. Eravamo arrivati alla funzione che crea la griglia di gioco:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| /**
* Disegno graficamente la griglia (3x3) a video
*
* @param void
* @return void
* @private
*/
private function createGrid ():void {
// puntatore temporaneo ad uno oggetto MovieClip
// nota: qui si sarebbe potuto usare anche un oggetto Sprite
// ma in questo caso mi serve di poter estendere l'oggetto
// aggiungendo alcune proproetà personali. L'oggetto Sprite
// è una classe chiusa e quindi non estendibile runtime, mentre
// la classe MovieClip è una classe dinamica e quindi rende
// possibile l'aggiunta di proprietà runtime
var tm :MovieClip, i :uint = 0;
// aggiungo in uno schema 3x3 i MovieClip
for(; i < 9; i ++) {
tm = new MovieClip();
addChild( tm );
tm .x = OFFSETX +( (i %3 )*(PLAYER_WIDTH +PLAYER_OFFSET ) )
tm .y = OFFSETY +Math.floor(i /3)*(PLAYER_HEIGHT +PLAYER_OFFSET )
tm ._index = i ;
drawPlayer ( tm , 0 );
}
// disegno le 2 linee veriticali e le 2 orizzontali
with( this.graphics ) {
lineStyle(6,0x666666 );
moveTo(OFFSETX ,OFFSETY +(PLAYER_HEIGHT +15));
lineTo(OFFSETX +( (PLAYER_WIDTH +20)*3 ),OFFSETY +(PLAYER_HEIGHT +15));
moveTo(OFFSETX ,OFFSETY +(PLAYER_HEIGHT +20)*2);
lineTo(OFFSETX +( (PLAYER_WIDTH +20)*3 ),OFFSETY +(PLAYER_HEIGHT +20)*2);
moveTo(OFFSETX +(PLAYER_WIDTH +15),OFFSETY );
lineTo(OFFSETX +(PLAYER_WIDTH +15),OFFSETY +( (PLAYER_HEIGHT +20)*3 ));
moveTo(OFFSETX +(PLAYER_WIDTH +20)*2,OFFSETY );
lineTo(OFFSETX +(PLAYER_WIDTH +20)*2,OFFSETY +( (PLAYER_HEIGHT +20)*3 ));
}
} |
Continua...
Premessa
Actionscript 3.0 può rappresentare un buon punto di partenza per impratichirsi, chi non è pratico di programmazione C e/o C++, di programmazione orioentata agli oggetti (OOP). Inoltre, questa serie di lezioni, saranno utili a chi proviene da altri ambienti o da precedenti versioni di Flash.
Impostare un progetto
In questa prima lezione vedremo come impostare un progetto Flash CS3 generico. È bene utilizzare i progetti quando si prevede di avere a che fare con almeno più di un file. L’uso dei progetti è stato introdotto – da Macromedia – già nelle versioni precedenti alla CS3, quindi dovrebbere essere argomento noto anche a sviluppatori Actionscript 2.0.
Comunque sia con Actionscript 3.0 – come vedremo – è possibile associare un file Actionscript (.as) al documento-filmato principale, il nostro .fla per intenderci. Questa caratteristica è molto utile e rende un progetto anche minimale composto da almeno due file: il .fla e .as associato. Per questo motivo è bene “sempre” partire da un progetto, così da organizzare sin da subito i vari file (.fla, .as, …) che faranno parte del nostro “pacchetto” di sviluppo.
Inoltre, una volta acquisita la dimesticazza con la filosofia ad oggetti, instrinseca in questo tipo di linguaggio, sarà normale ritrovarsi con numerosi file, anche per progetti sostanzialmente semplici.
Continua...
La tecnica di Text Replacement che presento oggi è, per certi aspetti, davvero interessante. A differenza della classica sostituizione per immagine tramite CSS, questa tecnica usa un filmato Flash per sovrascrivere i titoli del nostro sito. Nonostante sia un pochino più articolata, in quanto richiede la creazione di un filmato Flash e l’uso di Javascript, permette di ottenere una serie di vantaggi non indifferenti:
- Mantiene l’accessibilità del sito sfruttando un True-Unobtrusive-Javascript in modo che crawler e spider continuino a vedere la pagina come semplice e corretto HTML
- Non richiede la creazione di n immagini per n titoli. Basta un solo filmato per sostituire tutti i titoli del nostro sito, con un notevole risparmio in termini di Download
- Permette di creare anche titoli semplici ma con Font normalmente non utilizzati sul Web
- Il testo può essere reso in HTML, grazie alle caratteristiche di Flash
- Il testo è selezionabile
- Essendo un filmato Flash si può inserire interattività e animazioni di qualsiasi sorta
Noterete, anche, che in questa procedura i CSS non sono praticamente presi in considerazione!
Continua...
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...
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:
1 2 3 4
| //
import undolibrary.sfx.*;
//
var rx:Reflex = new Reflex( movieClipInstance ); |
Continua...
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
Scarica il sorgente
Continua...
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
Continua...
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.
Il sorgente fa parte del pacchetto undolibrary – presente su GoogleCode – ma se volete potete scaricare il singolo file ReflexMe.as.
Continua...
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.
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...
Ultimi Commenti
Marco: Ti ringrazio moltissimo, mi hai illuminato
ho risolto impostando [cc_objc] //OptionViewController.m -...
Giovambattista Fazioli: @Marco: Ti consiglio un approccio credo più corretto. Se hai eseguito il subclass del tab...
Marco: Scusa lo spam.. ho notato che c’è un errore.. ecco la correzione [cc_objc] /** PrimaClasse.h **/ #import...
Marco: dimenticato.. in [cci]OptionViewController[/cci ] il [cci]@syntetize[/cci] del delegato l’ho messo
luigi: molto chiaro e semplice devo ammettere che anche scrivendo da un pà difficilmente uso delegati creati da...