Pillole di Actionscript 3

Autorer: admin
1 Aprile 2009

Stavolta voglio presentare un piccolo elenco di pillole di actionscript 3, ossia codice che solitamente non s’impara a memoria, si effettua solitamente un copia/incolla di un codice già preparato e lo si applica al proprio progetto: per risparmiare tempo e vivere felici :-) (magari bastasse solo questo ;-) :-P )

GetUrl, OnPress, ciclo For, LoadMovie in actionscript 3.

GETURL in AS3

Il nostro amatissimo “geturl” di AS2 si è ormai esteso in actionscript 3 (un pò come tutti gli altri comandi), vediamo come trasformare una semplicissima riga di codice AS2:

_root.getURL(“http://www.enricoviola.it/blog”);

in AS3:

var req:URLRequest = new URLRequest("http://www.enricoviola.it/blog");
navigateToURL(req);

Ricordiamoci che se programmiamo in un file .as esterno bisogna prima importare le classi:

import flash.net.*;

ossia tutte le classi appartenenti alla categoria “.net” (necessario per gli URLrequest).

-

ONPRESS in AS3

//mioBottone può essere sia un movieclip sia un bottone,
//funzioneClick è la funzione che si avvia al click del pulsante.

mioButtone.addEventListener(MouseEvent.CLICK, funzioneClick);

//public và tolto se sviluppate il codice in un frame del filmato, se si
//tratta di un file .as esterno và invece inserito (va bene anche "private")

public function onClick(event:MouseEvent):void
{
trace("Il mio bottone è stato cliccato");
}

CICLO FOR

Spesso è + comodo fare un copia/incolla del ciclo for che riscrivilo da zero:

for (var i:int = 0; i < 12 (oppure array.length); i++)
{
	//funzione
}

LOADMOVIE in AS3

Importantissima scorciatoia per caricare swf esterni, o foto .jpg, .gif e .png esterni. In actionscript 2 il procedimento era veramente semplice: bastava usare i comandi “loadMovie” e “loadMovieNum” ; con actionscript 3 il caricamento di file esterni è un pò più lungo ma, capito il procedimento, semplice da utilizzare (soprattutto se si usa il copia-incolla del codice seguente ;-) ).

//inseriamo il collegamento al file che vogliamo collegare
var request:URLRequest = new URLRequest(”nomeFile.swf”);

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, funzioneDiCaricamentoUltimato);

function funzioneDiCaricamentoUltimato(event:Event){
//scrivere la funzione che si avvia alla conclusione del caricamento del file, togliere
//la funzione e il listener di sopra se non serve.
}
loader.load(request);
//caricamento del file direttamente sullo stage
addChild(loader);

duplicateMovieClip in AS3

Molto utilizzato in AS2 questo comando in AS3 è cambiato, ora si usa “NEW” per poter duplicare un movieclip. Ecco una esempio di duplicazione:

In questo caso innanzitutto mi creo in Libreria il movieclip che voglio duplicare (non importa che sia sullo stage), poi inserisco un nome di classedi concatenamento all’oggetto (tasto destro sull’oggetto in libreria e click su “concatenamento”, poi inserisci il nome che preferisci, in questo caso “stella1″). Poi vado dentro il codice, che può trovarsi in un .as esterno o internamente al filmato ed inseriamo:

//crea un Array che conterrà tutti i nuovi Movieclip creati
var mcs:Array = new Array();
//crea un ciclo for x tutti i MC nuovi che vuoi creare
for (var i:int = 0; i < 10;  i++) {

//chiameremo duplicato il nuovo MC, ma non utilizzeremo questo nome x chiamarlo quando ci serve.
var duplicato:stella1 = new stella1();
duplicato.name = “duplicato” + i;
duplicato.x += 20 * i;
addChild(
duplicato);

//aggiungiamo ogni MC creato all’Array “mcs”
mcs.push(
duplicato);
}

//per chiamare un preciso MC duplicato utilizziamo l’Array e il numero dell’elemento correlato (ricordiamoci che gli Array iniziano da 0), in questo modo abbiamo un nome univoco per ogni MC duplicato.
mcs[4].alpha = 0.5;

5 risposte to “Pillole di Actionscript 3”

  1. Enrico Viola - Flash Design » Blog Archive » Rimuove swf esterno in AS3, col comando Unload o UnloadAndStop (fp 10) Says:

    [...] 3 questa pratica rimane, semplicemente cambiano i metodi di caricamento dell’swf esterno, il codice si allunga un pò ma risulta sicuramente impostato in maniera più regolare (come un vero e proprio linguaggio di [...]

  2. stefano Says:

    Ciao Enico,
    Spero ke tu mi possa aiutare…mi sento un deficente con AS3.0 :-)
    nell’esempio qui sotto volevo, con un tasto, caricare un’img esterna e con un altro tasto rimuovere la stessa.
    Il “Caricare” funziona ma appena metto la function per ” removeChild” associata ad un altro tasto flash mi da error
    “1120: Access of undefined property loaderImg.” saràa sicuramente una cosa banalissima….ma io sono disperato :-(
    Grazie
    Ciao

    stop();

    function caricaFoto (event:MouseEvent) {

    var urlPath:URLRequest=new URLRequest(”fotoest/angelina-jolie.jpg”);

    var loaderImg:Loader=new Loader();

    loaderImg.load(urlPath);

    addChild(loaderImg);

    loaderImg.x=100;
    loaderImg.y=0;

    }

    function scaricaFoto(event:MouseEvent):void {

    removeChild(loaderImg);

    }

    carica_btn.addEventListener(MouseEvent.CLICK, caricaFoto);

    scarica_btn.addEventListener(MouseEvent.CLICK, scaricaFoto);

  3. admin Says:

    Ciao Stefano,
    si, in effetti è una cosa semplice che ti è sfuggita.
    prova a mettere questa riga :
    var loaderImg:Loader=new Loader();
    subito dopo lo “stop();”, devi cioè toglierla da dentro la funzione “caricaFoto” altrimenti avrà validità soltanto all’interno della stessa e non per altre funzioni. Se invece inizializzi la variabile all’esterno di qualsiasi funzione avrà validità per tutto l’actionscript del filmato.
    Bye

  4. Alberto Says:

    Ciao e grazie degli snippets!

    Ma come si passano argomenti via listeners ? Non posso costruirmi una funzione unica che gestisca gli eventi (ROLL_OVER, ROLL_OUT … ecc ecc.) e passare nel listener il nome dell’istanza ?

  5. admin Says:

    Ciao Alberto,
    Per quanto riguarda la tua seconda domanda, ogni oggetto ha i suoi listener, ovviamente le funzioni alla quale si collegano tali listener possono anche essere le stesse per qualsiasi oggetto.
    E’ poi possibile usare THIS dentro la funzione generica, per collegare tale funzione al preciso oggetto che ha subito l’azione.
    Un trucchetto che ho usato io nei miei lavori, al fine di scrivere una funzione che valga per più oggetti che hanno un listener, è quello di realizzare una nuova PROPRIETA’ (con lo stesso nome) per ognuno degli oggetti che subiscono il listener (ad esempio PULSANTE1.NOME_PROPRIETA_PERSONALIZZATA_CHE_VOGLIO_AGGIUNGERE = “valore che m’interessa aggiungere, tipo una stringa come questa”), in questo modo posso, dalla funzione che viene richiamata tramite il listener, passarmi questo argomento per quel preciso oggetto (ad esempio scrivendo questo codice nella funzione richiamata dal listener: trace(THIS.NOME_PROPRIETA_PERSONALIZZATA_CHE_VOGLIO_AGGIUNGERE); spunterà proprio la stringa di sopra).
    In questo modo posso passarmi anche dei valori collegati ad un preciso oggetto.
    Bye

Leave a Reply