Per alcuni sviluppatori basta sapere che esiste una nuova versione del loro pacchetto di sviluppo preferito per correre ad acquistare l’aggiornamento. Altri, e non a torto, mantengono una maggiore calma e "pretendono" di conoscere gli effettivi miglioramente della nuova versione prima di modificare le proprie abitudini. Nel caso di Adobe Flash CS3 non c’è molto da attendere, visto gli innumerevoli cambiamenti che ha subito il pacchetto da quando Macromedia è stata acquisita da Adobe.
Ecco, quindi, 10 semplici, ma importanti, motivi che, a mio personale parere, bastano per convincersi ad eseguire l’aggiornamento ad Adobe Flash CS3. Mi soffermerò, ovviamente, solo sulle caratteristiche che mi hanno colpito personalmente; questo non vuole essere un elenco esaustivo di tutte le numerose novità introdotte con la suite CS3, solo un volo radente per anticipare qualche features della versione CS3.
1. Installazione
L’installazione è gradevole e rapida, rispetto alle precedenti versioni. Si integra, tra l’altro, con tutti i prodotti Adobe (Dreamweaver CS3, Photoshop CS3 extended, ecc…) il che rende le operazioni di installazione/rimozione ed aggiornamento un vero piacere.
2. Compatibilità a ritroso
Una questione spesso sottovalutata, ma sempre tenuta in considerazione nella storia di Flash: la possibilità di gestire le precedenti versioni del prodotto. In Flash CS3 ci sono tutti gli strumenti sia per migrare che per manipolare le precedenti versioni dei nostri filmati. Troviamo questa possibilità sia nel debug (un debug separato per Actionscript 2.0 e Actionscript 3.0) sia in fase di compilazione del filmato. Scrivere da subito applicazioni Flash in Actionscript 3.0 potrebbe essere controproducente in determinati contesti. Se il vostro sito target ha un traffico notevole potrebbe capitare che molti utenti non hanno ancora installato le ultime versioni del Player Flash per il browser e quindi non vedrebbero il filmato. Tuttavia, come già detto, Flash CS3 permette di sviluppare applicazioni Flash mantendedo la compatibilità a ritroso e quindi non vedo in questo un grosso ostocalo nell’upgrade del prodotto.
3. Interfaccia grafica e IDE
L’IDE di Flash CS3 (come quella di Dreamweaver CS3) è stata rivisitata al meglio. I pannelli (vedi figura qui a sinistra), spesso scomodi nelle precedenti versioni, sono stati completamente ridisegnati e adesso il loro uso è notevolemente meno invasivo.
Inoltre la possibilità di ridurre ad icona i pannelli (vedi figura qui a destra) è una vera trovata che rende l’interfaccia gradevole e funzionale. Quando un pannello si trova in modalità icona occupa molto meno spazio e con un semplice click è possibile aprire il pannello principale prima sempre visibile.
Tutta l’IDE, insomma, è stata rivista compresa la zona centrale con la finestra per l’editing grafico e del codice. Non vi segnalo tutti i cambiamenti altrimenti vi rovinerei la sorpresa…

Continua...
Uno dei punti di forza di Adobe Flash risiede nella scelta di ECMAScript (sottoprodotti di ECMA – European Computer Manufacturers Association) come standard di scripting. ActionScript e Javascript, infatti, derivano entrambi da uno standard superiore che li rende estremamente simili. Questo è uno dei motivi per il quale molti programmatori ActionScript sviluppano con estrema semplicità anche in Javascript e viceversa.
ActionScript ha da sempre avuto una gestione “doppia” degli eventi che spesso ha confuso alcuni sviluppatori. Nei MovieClip, ad esempio, è possibile impostare un evento semplicemente dichiarando una funzione alla proprietà dell’evento stesso, ad esempio:
Metodo 1
1 2 3
| mio_mc.onRelease = function() {
trace("Click sul MovieClip");
} |
Altri oggetti, diversamente, richiedono una gestione diversa dell’evento che si vuole monitorare, richiedendo il classico listener, un oggetto predisposto a tale compito. Ad esempio l’oggetto Mouse può essere controllato in questo modo:
Metodo 2
1 2 3 4 5
| var mouseListener :Object = new Obejct ();
mouseListener .onMouseMove = function() {
trace("Mouse in moto");
}
Mouse.addListener (mouseListener ); |
I componenti possiedono un’ulteriore variante, come il componente Loader:
Metodo 3
1 2 3 4 5
| var loaderListener :Object = new Object();
loaderListener .complete = function(evt :Object) {
trace("Caricamento completato");
};
myLoader_ldr .addEventListener("complete", loaderListener ); |
Perchè queste differenze? La ragione, in verità, è molto semplice. Il metodo 1, quello più immediato, viene utilizzato quando l’evento da “intercettare” è unico nel suo genere, cioè quando non ha senso far “scattare” più funzioni una di seguito all’altra. I metodi 2 e 3, invece, creano delle “liste” di “ascoltatori” e sono estremamente utili e potenti in quanto consentono di agganciare virtualmente infinite funzioni ad un determinato evento.
La stessa identica cosa accade in Javascript e la si può ammirare in librerie come prototype. Il comodissimo metodo observe(), messo a disposizione dall’oggetto Event, permette di agganciare funzioni ad un evento di un oggetto. Ad esempio:
1
| Event.observe(window, 'load', function() { alert("Finestra caricata"); } ); |
In questo caso abbiamo agganciato la nostra funzione che mostra un alert all’evento load dell’oggetto window. Potremmo tuttavia ripetere l’istruzione e agganciare un’ulteriore evento:
1 2
| Event.observe(window, 'load', function() { alert("Finestra caricata - 1"); } );
Event.observe(window, 'load', function() { alert("Finestra caricata - 2"); } ); |
Questa caratteristica, comune anche in ActionScript, è estremamente versatile è, in particolare in Javascript, è stata la chiave per la realizzazione di moltissimi “Widgets” ed estensioni (vedi il classico Snap) che oggi proliferano nel Web. La possibilità di accodarsi, infatti, ad eventi già controllati da altre funzioni, permette di essere non intrusivi (Unobtrusive) e quindi, in pratica, di aggiungere funzioni a quelle già presenti.
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...