Very short trick: cicli for più rapidi in Actionscript

Mercoledì 15 Ottobre, 2008

In Actionscript i cicli for è bene utilizzarli sempre con cura. Ad esempio è bene usare variabili uint quando è possibile:

Actionscript:
  1. for( var i:uint = 0; i++; i <100) {
  2. // ...
  3. }

È anche possibile usare la - non sempre conosciuta - forma:

Actionscript:
  1. var i:uint = 0;
  2. // ...
  3. for(;  i++; i <100) {
  4. // ...
  5. }

Post correlati

Actionscript 3.0: MovieClip over MovieClip

Martedì 14 Ottobre, 2008

Appena uno sviluppatore Flash/Actionscript si appresta a scrivere una funzione simile ad un tooltip, si scontra immediatamente con il problema della propoagazione degli eventi tra MovieClip sovrapposti. Infatti se un MovieClip (B) si sovrappone ad un MovieClip (A) che risponde, ad esempio, ad un evento MouseEvent.Mouse_OVER, passando con il mouse sul MovieClip (B) più alto nessun evento verrà più intercettato dal MovieClip (A):

MovieClip over MovieClip

In questo scenario si presenta la necessità di inibire l'intercettazione degli eventi da parte del MovieClip (B). Questo è possibile impostando a false la property mouseEnabled:

Actionscript:
  1. mcb.mouseEnabled = false;

Post correlati

Una classe countDown in Javascript

Lunedì 13 Ottobre, 2008

Nel post 3D CountDown con FIVe3D (vedi anche How I Did It: scrivere un countdown in Flash), veniva proposta una classe per la creazione di un oggetto CountDown in Actionscript, eccone una versione simile in Javascript:

JavaScript:
  1. /**
  2. * CountDown Class
  3. *
  4. * @author        Giovambattista Fazioli
  5. * @email         g.fazioli@undolog.com
  6. * @web           http://www.undolog.com
  7. *
  8. * @param    dd   (string) 'month day, year'
  9. *
  10. */
  11. function countDown( dd ) {
  12.     // init target time
  13.     var target            = new Date( dd );
  14.     this.targetTime        = target.getTime();
  15.    
  16.     /**
  17.      * refresh countdown
  18.      */
  19.     this.refresh = function() {
  20.         var today                 = new Date();
  21.         var currentTime           = today.getTime();
  22.         // time left
  23.         this._leftMilliseconds    = (this.targetTime - currentTime);
  24.         this._leftSeconds         = Math.floor( this._leftMilliseconds / 1000 );
  25.         this._leftMinutes         = Math.floor( this._leftSeconds / 60 );
  26.         this._leftHours           = Math.floor( this._leftMinutes / 60 );
  27.         // no module
  28.         this.leftDays             = Math.floor( this._leftHours / 24 );
  29.         // for print
  30.         this.leftMilliseconds     = this._leftMilliseconds % 1000;
  31.         this.leftSeconds          = this._leftSeconds % 60;
  32.         this.leftMinutes          = this._leftMinutes % 60;
  33.         this.leftHours            = this._leftHours % 24;
  34.     }
  35.     this.refresh();
  36. }

Esempio

JavaScript:
  1. var cd = new countDown( '1 1, 2009' );
  2. // mostra quanti giorni, ore, minuti, secondi e millisecondi al primo gennaio 2009
  3. document.write( cd.leftDays + "," + cd.leftHours + "," + cd.leftMinutes + "," + cd.leftSeconds + "," + cd.leftMilliseconds );

Post correlati

Adobe Creative Suite 4: Roma 21 ottobre 2008

Venerdì 3 Ottobre, 2008

Adobe Creative Suite 4: Roma 21 ottobre 2008

Adobe è lieta di invitarti agli eventi di lancio della nuova Adobe Creative Suite 4. Ti aspettiamo a Roma il 21 Ottobre e a Milano il 30 Ottobre. Per tutti i dettagli dell'incontro vai al minisito dedicato agli eventi CS4! In omaggio per tutti i partecipanti la t-shirt CS4!

Io cercherò di esserci... soprattutto per la maglietta :)

Post correlati

Considerazioni sull’evoluzione dei linguaggi di svilluppo: AS2 vs AS3

Martedì 5 Agosto, 2008

Leggendo l'articolo di Julius ActionScript 2 o ActionScript 3? Facciamo chiarezza! vorrei fare alcune considerazioni sull'evoluzione "inversa" di alcuni strumenti di sviluppo per chi, come me, viene dalla programmazione C/C++.

Una caratteristica comune - negli ultimi anni - di alcuni ambienti di sviluppo è quella di raffinare la sinstassi del proprio linguaggio con il tempo. Si parte da un linguaggio ad alto livello, come il Lingo di Macromedia Director, Actionscript 1.0 delle prime versioni di Flash o Microsoft Visual Basic 3 per arrivare ad allinearsi con il tempo alle specifiche e alle - ormai consolidate - sintassi dettate dallo standard ECMA. Anche se paragonare un Microsoft Visual Basic 3 con Javascript o Actionscript non è del tutto corretto, entrambe le situazioni denotano una chiara evoluzione "inversa" rispetto agli albori della codifica di programmazione.
Unica eccezione, forse, in questo scenario, sono soluzioni come Java o PHP, entrambi con radici fortemente orientate al C/C++.

Concentrandoci su Actionscript, è chiara la volontà della casa prodruttrice (ora Adobe) ad allineare il linguaggio di Flash allo standard ECMA. Usare ancora Actionscript 2.0 non porta nessun concreto vataggio allo sviluppatore, soprattutto a chi non possiede le conoscenze di base proprie del C/C++. Aggiungere patch a vecchi progetti, senza doverli "portare" (riscrivere) in base alle ultimi release, ha un senso in un'ottica di economia. Tuttavia sarebbe utile imparare subito, quando si presenta l'occasione, le "nuove" sintassi proposte dagli aggiornamenti degli ambienti di sviluppo. Più si attende e peggio sarà!

Apprendere Actionscript 3.0, per chi viene dal C/C++, è più come "disapprendere" (o disimparare), le vecchie "clausule", forzate e non standard, presenti nelle precendenti versioni. Stessa cosa accadrà con l'uscita di Flash CS4; evitare, quindi, di rimanere indietro.

Inoltre, lo standard, rende la portabilità del codice estremamente più fattibile e concreta. La similitudine tra PHP, Javascript e Actionscript 3.0, evita di dover rivedere pesantamente codici e algoritmi scritti in uno solo di questi linguaggi.

Post correlati

Tecniche di Text Replacement in Flash

Mercoledì 25 Giugno, 2008

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 a leggere... »

Post correlati

Very short snippet: cutString()

Mercoledì 4 Giugno, 2008

Utile e rapido! Con i valori Number di Actionscript, ad esempio, è un essenziale aiuto per il "print" a video.

Actionscript:
  1. /*
  2. ** @name        : cutString()
  3. ** @description : cut a string for n chars
  4. */
  5. protected function cutString(s:String, v:uint = 4):String {
  6.     return ( (s.length> v)?s.substr(0,v):s );
  7. }

Spesso lo uso anche in versione sub() o _s()

Post correlati

Argomenti variabili e di default in Javascript, Actionscript e PHP

Mercoledì 7 Maggio, 2008

Chi sviluppa sa bene che una delle caratteristiche delle funzioni (function () ) è quella di avere o meno degli argomenti di input. Può capitare, a volte, di dover scrivere una funzione che, in base ai parametri di input, si comporta in modo differente (in programmazione OO troviamo questo comportamento indicato come poliformismo). I parametri variabili (varargs), introdotti già all'epoca del C e presenti di default nella classica dichiarazione del main:

CODE:
  1. int main(int argc, char *argv[]);

Continua a leggere... »

Post correlati

Flash 10 Astro: 3D nativo vs Papervision3D

Sabato 3 Maggio, 2008

Adobe ha annunciato da tempo alcune nuove features (Hydra per i filtri grafici evoluti e una migliore gestione del testo) che saranno presenti nella prossima release di Flash. In particolare ha destato interesse l'introduzione del 3D (l'asse Z), la capacità quindi di Flash di manipolare oggetti in un mondo tridimensionale. La stessa Adobe precisa che si tratta in realtà di un 2.5D, come spesso viene indicato, una specie di "simulazione" di un vero e proprio mondo tridimensionale. Infatti si può ruotare un simbolo Flash introno all'asse z ma, nonostante questo, il simbolo rimane piatto nello spazio tridimensionale! Un po' quello che accade quando si distorce una bitmap in Photoshop! Tutto questo, quindi, non ha niente a che fare con progetti come Papervision3D, Away3D, Sandy e molti altri, che contengono tutta una serie di features (camera, scene, texture, etc...) assenti "nell'Astro nascente". In sostanza Adobe non vuole assolutamente sovrapporsi a progetti 3D di terze parti ma solo fornire uno strato nativo per migliorare le prestazioni di librerie 3D già esistenti.

Comunque sia la cosa importante è che Adobe sembrerebbe orientata ad introdurre queste funzionalità tridimensionale ad un alto livello, non aiutando affatto librerie complete e complesse come Paparevision3D. Da tempo, infatti, si usano sostanzialmente due tecniche per espandere le funzionalità di Flash: API di basso livello e API di alto livello.

Le API di basso livello vengono normalmente scritte in C/C++ e fanno parte del core di Flash, compilate quindi all'interno del Player. Questo metodo se da un lato garantisce una maggiore velocità di esecuzione, dall'altro aumenta le dimesioni del Player Flash.

Le API di alto livello sono invece scritte in Actionscript e non appartengono al core nativo. In altre parole sono del tutto simili a librerie che potremmo scrivere noi, con la differenza che vengono fornite direttamente da Adobe. Come accade con il rilascio di Flash 5, la prima introduzione dell'oggetto XML fu realizzata completamente in Actionscript, creando non pochi problemi di performance!
Il vantaggio è che librerie di questo tipo vengono compilate solo quando necessarie e scaricate quindi all'interno del file SWF. Come accade oggi con l'oggetto Tween (vedi fl.motion.* o fl.transition.*) interamente scritto in Actionscript (anche per questo sono nati progetti paralleli come Tweener (caurina.transitions.Tweener) o TweenerMax.
Proprio per questo motivo la comunità Papervision non è del tutto contenta della scelta di utilizzare API di alto livello, in pratica dello stesso "livello" di Papervision3D. Questo, infatti, potrebbe non influire sulle future performance di librerie 3D.

Comunque andrà a finire, la cosa importante è che Papervision3D non è morto, anzi!

Post correlati

Snipplr code 2.0: frammenti (snipp) di codice utile

Sabato 26 Aprile, 2008

Snipplr Era da tempo che volevo segnalare questo utilissimo servizio dedicato al mondo della programmazione. Snipplr (code 2.0) è un vero e proprio aggregatore o repository di frammenti di codice utili. È possibile registrarsi gratuitamente ed inviare le proprio porzioni di codice e, soprattutto, usufruire dei tantissimi snipp già presenti su sito. I linguaggi trattati sono tantissimi (Actionscript, ASP, C#, MatLab, PHP, Rails, SVN, etc...), tutti ben ordinati e catalogati. È possibile anche installare un comodo plugin per Wordpress in grado di visualizzare sul nostro blog un snipp-code tramite il suo id univoco.

Post correlati