ActionScript, ActionScript 3, Tutorials

Design Patterns – Comunicazione tra classi in actionscript 3

Sarò breve e conciso (le ultime parole famose :))

Il problema che andrò ad affrontare è il seguente:
come faccio a comunicare ad una classe il risultato di una funzione, o pi√π generalmente dei “dati” elaborati in maniera asincrona da un’altra classe istanziata nella mia classe di partenza?

Se i dati fossero elaborati e restituiti in diretta non ci si porrebbe il problema, esempio ne sono le classi di largo consumo come Math e Date (es: var mioint:int = Math.round(9.99999)).

Ma se volessi delegare (termine usato non a caso, visto i trascorsi di as2 :)) a delle classi customizzate la mole di lavoro tipo delle routines di caricamento o qualcosa di simile?

Poniamo il caso di voler caricare una configurazione per la nostra applicazionesitogame… che risiede su un file cfg.xml.
Potremmo fare il tutto all’interno della document class cos√¨,

  1. creiamo una private var _cfgxml:XML
  2. nel costruttore andiamo a caricarci i dati con var myLoader:URLLoader = new URLLoader(new URLRequest(‘cfg.xml’));
  3. appioppiamo al loader un gestore di evento Event.COMPLETE a cui associamo il parsing dei dati myLoader.addEventListener(Event.COMPLETE,cfgParse);
  4. creiamo private function cfgParse(e:Evento) in cui istanziamo _cfgxml = new XML(e.target.data);

Ok, √® un’ipotesi plausibile, ma se questo nostro file richiedesse attenzioni particolari? o se semplicemente volessimo delegare ad altre classi le funzioni di parsing, di comunicazione con componenti, ecc ecc, solo per la soddisfazione di essere pi√π “puliti” nel codice…?

In actionscript 2 avremmo utilizzato Delegate passando come argomento la timeline (o l’istanza di classe) di riferimento. Ma in actionscript 3 “Delegate √® stat’ segheit” 😀

Si rende quindi necessario passare la timelineistanzadiclasse di riferimento come parametro per l’istanziazione della classe che elaborer√† i dati.

Esempio:

document class

private var _cfg:CFGManager;

public function Main(){
//costruttore
_cfg = new CFGManager(this);
_cfg.loadCFG();

}public function continuaMainClass(){}

classe richiamata dalla document class

private var _main:Main; //riferimento alla classe chiamante
public function CFGManager(m:Main){//costruttore
_main=m;//qui vado a memorizzare i riferimenti al main
}

public function loadCFG(){
//qui carico il mio xml di configurazione
//appioppo l'event listener per il caricamento
//e poi passo il tutto a parseCFG
}
private function parseCFG(e:Event){
//qui parso l'xml da e.target.data
//e poi faccio continuare l'esecuzione del main
_main.continuaMainClass();
}

Perfortuna non √® nulla di cos√¨ complesso 😀

Per ottimizzare il tutto per√≤ sar√† opportuno non ricevere in ingresso un parametro fortemente tipizzato, ad esempio la classe CFGManager accetta in input solo parametri di tipo “Main”…se si vuole “astrarre” il codice, in modo da renderlo riutilizzabile sar√† opportuno che accetti potenzialmente qualsiasi tipo di dato, da DisplayObject all’estremo “*”…ma poi sono gusti 😀

avevo detto che sarei stato breve, quindi alla prossima 😀

ActionScript, Anything else, News, Open Source

Aptana Actionscript editing support – ecco cosa dice lo staff dell’alternativa free ai tool di Adobe

Da mesi sto cercando articoli, tutorial, tentativi, abbozzi di codice o discussioni relativi al supporto per l’editing di actionscript (principalmente as3) su Aptana (che ormai è diventato il mio tool di programmazione definitivo per il “non-flash development” :D).

Esistono vari plugin di eclipse in grado di affrontare questa necessità, cito ASDT (actionscript development tools) per as2 e il binding dell’sdk di flex alle risorse di eclipse via flex2ant per as3.

Tuttavia tutti i metodi che ho sperimentato sono a mio avviso insoddisfacenti.

Dopo il rilascio del plug-in di aptana per il supporto della tecnologia Adobe AIR tutti (io per primo :)) si aspettavano un supporto che tale plug-in apportasse all’ambiente di editing le capacità di gestire anche actionscript, ma nessuna risposta è stata data in merito dallo staff tecnico di Aptana.

MA girovagando tra i ticket di Aptana oggi mi sono imbattuto in questo post il team esecutivo scrive:

We are currently working on the next milestone release of the core IDE and will discuss AS3 support once we start to plan our next Adobe AIR plugin release.

 (Stiamo giustappunto lavorando alla prossima release di aptana e discuteremo del supporto di actionscript 3  nonappena inizieremo a pianificare la prossima versione del plug-in per il supporto di AIR)

Certo, non è una risposta capace di entusiasmare le folle, ma almeno è una risposta 😀
Inoltre il post procede con un

“This is definitely the most requested enhancement so we will take a hard look at what it will take to implement this.”

(questa è in assoluto la feature più richiesta quindi vedremo di fare il possibile per fare in modo di implementarla)

Ecco, in una riga hanno già corretto il tiro…

Aspettiamo fiduciosi…
nel frattempo, bè, asdt e flex2ant non sono poi così male 😀

ActionScript, ActionScript 2, ActionScript 3, Anything else, Flash, News

Actionscript 3 VS Actionscript 2

AS2 o AS3?
Idee e opinioni degli addetti ai lavori sulle versioni di actionscript, sulle tendenze di mercato..

gotoandfuck.png

Riporto il topic su wave9.it, leggetelo qui o andate direttamente alla fonte 😀

Apro questo thread perch√® √® forte lo slancio che da un p√≤ di tempo a questa parte ha trascinato l’attenzione di molti “flasher” su AS3, e diverse sono le opinioni a riguardo tra gli addetti ai lavori e non solo.

Actionscript 3 ha portato insieme gioie e perplessità,
ha sicuramente accentuato le differenze tra le figure “flash coder” e “flash designer” marcando pi√π strettamente il territorio di confine.
Forse ha incrinato la figura del “flasher” come “colui che sviluppa in flash” e ha attirato (soprattutto con la sempre maggiore diffusione di flex) una valanga di coders a cimentarsi con actionscript.

C’√® chi pensa che AS3 abbia solo complicato le cose, o meglio turbato l’equilibrio che si era andato a creare con l’avvento di flash mx,
che con AS3 serva scrivere molto pi√π codice per fare le stesse cose che si facevano in AS2, e quindi non serva a nulla,
che AS3 e la AVM2 (la virtual machine di flash player 8.5+) sia solo una strategia di marketing per stravolgere il mercato e vendere flash 9 (ehm…cs3) e flex builder ad una fetta pi√π ampia di coders….

C’√® anche chi pensa che AS3 sia il “futuro” ( anche se non ancora ben rodato),
che AS3 sia effettivamente pi√π valido di AS2, che la virtual machine sia nettamente pi√π performante della precedente…e via cos√¨…

…e intanto hanno presentato al MAX il flash player 10…

E voi cosa ne pensate?

ActionScript, ActionScript 2, ActionScript 3, Flash, Tutorials

Adattare un swf alle dimensioni del browser con actionscript, oggetto stage, e CSS

Molti siti propongono swf a tutto schermo conseguendo l’obbiettivo in vari modi pi√π o meno compatibili con le specifiche W3c.

Se la domanda che vi assilla è:
“Come si fa ad adattare un swf alle dimensioni della finestra del browser in modo che il risultato sia compatibile con i maggiori browser?” continuate pure a leggere 😀

Continue reading

ActionScript, ActionScript 2, Flash, Tutorials

AS2 Multi Mask – come assegnare la stessa maschera a pi√π movieclip

La domanda da porsi è:
e se volessi mascherare più di un movieclip con la stessa maschera partendo da un mc già mascherato?

La risposta è:
esiste un hack a riguardo fin dai tempi di flash mx.

Funziona così:
si maschera un movieclip direttamente da timeline, gli si assegna un nome istanza (ad esempio “myClip”).
Una volta mascherato si può procedere con la parte di script.

myClip.attachMovie("movieclipinlibreria","nome",myClip.getDepth()-1);

così facendo il nuovo clip inserito nello stage sarà mascherato esattamente come myClip.
Continue reading

ActionScript, ActionScript 2, ActionScript 3, Tutorials

Actionscript getters setters VS public vars: cosa sono, come e quando si usano

Anche un newbie di actionscript sa cosa significa questa riga di codice:

var myInstance:MyClass = new MyClass();
myInstance.myVar = 1;

la propriet√† “myVar” dell’istanza di classe myInstance assume il valore 1.

Ma forse non è così immediato capire cosa può nascondere la stessa riga di codice. Continue reading