• Gestione Eventi in Actionscript 3 – Differenze rispetto ad Actionscript 2

    Date: 2010.08.03 | Category: Actionscript 3 - Trucchi e Segreti | Tags: ,,

    Actionscript 3 La gestione degli eventi in Actionscript 3 è stata decisamente migliorata. Risulta fondamentale capire fin da subito che il codice che si utilizzava nella precedente versione è del tutto incompatibile in Actionscript3.In questo breve articolo illustrerò, tramite degli esempi pratici, la differenza tra la gestione degli eventi sui clip filmato in Actionscript 2 ed Actionscript3.

    Gestione Evento “Click” in Actionscript 2

    Ecco un piccolo esempio di gestione dell’evento “click” su un clip filmato nominato “nome_clip_mc” in as2:

    nome_clip_mc.onPress=function(){
    trace("clip filmato cliccato");
    }

    Questo struttura del codice è da dimenticare poiché non è più valido in actionscript 3. Qui dobbiamo usare i listener e i metodi della classe EventDispatcher.

    Che cos’è un listener ed una funzione gestore dell’evento (handler)

    Un listener è una specie di “sentinella/spia” che cerca di intercettare gli eventi (es. Passagio sopra del mouse, Click etc) che possono accadere su un determinato oggetto che in genere è rappresentato da un clip filmato.

    Vedremo che per un listener è necessario impostare il tipo di evento per cui la nostra “sentinella” dovrà mettersi in ascolto e poi “che cosa fare” nel momento in cui l’evento accade.
    Il “che cosa fare” si traduce in una chiamata a funzione che prende il nome di “Gestore dell’Evento o Handler”.

    Quindi dobbiamo trovare un modo per:

    • Aggiungere un listener ad un oggetto (es. Pulsante o Clip Filmato)
    • Specificare il tipo di Evento che vogliamo catturare (es. Click del Mouse – Passaggio sopra)
    • Richiamare un’opportuna funzione che gestisca questo evento

    Gestione Evento “Click” in Actionscript 3

    Il codice scritto prima diventa:

    nome_clip_mc.addEventListener(MouseEvent.CLICK,gestoreClick);

    function gestoreClick(e:MouseEvent"){
    trace("MouseEvent.CLICK");
    }

    Da notare che il per impostazione predefinita i clip filmato non si comportano come dei pulsanti, quindi non compare il cursore a forma di “manina” nel momento in cui ci si sposta sopra con il mouse. Per far si che questo avvenga bisogna dire a questi clip filmato che sono dei pulsanti impostando le proprietà buttonMode=true e useHandCursor=true.

    nome_clip_mc.buttonMode = true;
    nome_clip_mc.useHandCursor = true;

    Vediamo velocemente gli altri eventi in Actionscript 2 (onRollOver,onRollOut,onPress,onRelease)

    nome_clip_mc.onRollOver = function(){ // qui il codice da eseguire}
    nome_clip_mc.onRollOut = function(){ // qui il codice da eseguire }
    nome_clip_mc.onPress = function(){ // qui il codice da eseguire }
    nome_clip_mc.onRelease = function(){ // qui il codice da eseguire}

    In actionscript 3 si traduce nel seguente modo:

    import  flash.display.MovieClip;
    import  flash.events.MouseEvent;
    nome_clip_mc.addEventListener(MouseEvent.ROLL_OVER, onRollOverHandler);
    nome_clip_mc.addEventListener(MouseEvent.ROLL_OUT, onRollOutHandler);
    nome_clip_mc.addEventListener(MouseEvent.CLICK, onClickHandler);
    nome_clip_mc.addEventListener(MouseEvent.MOUSE_DOWN, onPressHandler);
    nome_clip_mc.addEventListener(MouseEvent.MOUSE_UP, onReleaseHandler);
    nome_clip_mc.buttonMode = true;
    nome_clip_mc.useHandCursor = true;
    function onRollOverHandler(e:MouseEvent){
    trace(“Over”);
    }
    function onRollOutHandler(e:MouseEvent){
    trace(“Out”);
    }
    function onClickHandler(e:MouseEvent){
    trace(“I waited for Press AND Release!!!”);
    }
    function onPressHandler(e:MouseEvent){
    trace(“Press”);
    }
    function onReleaseHandler(e:MouseEvent){
    trace(“Release”);
    }

    Errori Tipici


    ArgumentError: Error #1063: Argument count mismatch on… Expected 0, got 1.

    Le funzioni che gestiscono l’evento del mouse devono accettare un parametro di tipo MouseEvent, ad esempio:

    myRollOver(e:MouseEvent)


    1046: Type was not found or was not a compile-time constant: MouseEvent

    Avete dimenticato di importare:

    import flash.events.MouseEvent