Ricerca…


Osservazioni

Gli eventi sono pezzi di dati che un programma può creare, scambiare e reagire. Il flusso di eventi asincroni viene inviato nell'elenco di visualizzazione da parte di Flash Engine come reazione a eventi esterni, come i movimenti del mouse o un altro frame visualizzato. Ogni altro flusso di eventi e l'elaborazione di tutti gli eventi sono sincroni, quindi se un pezzo di codice ha generato un evento, tutte le reazioni su di esso vengono elaborate prima dell'esecuzione della riga successiva, anche se ci sono più ascoltatori di un evento, tutti avrebbe funzionato prima che potesse essere elaborato il prossimo evento.

Ci sono molti eventi importanti associati alla programmazione Flash. Event.ENTER_FRAME viene generato prima che Flash disegna un altro frame, segnali l'intero elenco di visualizzazione per prepararsi a essere disegnato e può essere utilizzato come timer sincrono. MouseEvent.CLICK e i suoi fratelli possono essere utilizzati per ricevere input del mouse dall'utente e TouchEvent.TOUCH_TAP è un analogo per i touch screen. KeyboardEvent.KEY_DOWN e KEY_UP forniscono mezzi per ricevere input dell'utente dalla tastiera, tuttavia, il loro utilizzo nel reparto mobile è quasi impossibile a causa di dispositivi che non dispongono di tastiera fisica. Infine, Event.ADDED_TO_STAGE viene inviato una volta che un oggetto di visualizzazione riceve l'accesso allo stage ed è incluso nell'elenco di visualizzazione globale che riceve l'intera serie di eventi che possono saltare su e giù nell'elenco di visualizzazione.

La maggior parte degli eventi in Flash sono specifici dei componenti. Se stai progettando il tuo componente che userà eventi Flash, usa una classe discendente flash.events.Event e le sue proprietà String statiche per creare il set di eventi del componente.

Eventi personalizzati con dati di eventi

package
{
    import flash.events.Event;

    public class CustomEvent extends Event
    {
        public static const START:String = "START";
        public static const STOP:String  = "STOP";

        public var data:*;

        public function CustomEvent(type:String, data:*,
                                    bubbles:Boolean=false, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);

            if (data)
                this.data = data;
        }
    }
}

Per inviare un evento personalizzato:

var dataObject:Object = {name: "Example Data"};

dispatchEvent(new CustomEvent(CustomEvent.START, dataObject))

Per ascoltare eventi personalizzati:

addEventListener(CustomEvent.STOP, stopHandler);

function stopHandler(event:CustomEvent):void
{
    var dataObject:* = event.data;
}

Mancata gestione degli eventi dall'elenco di visualizzazione

package {
import flash.events.EventDispatcher;

public class AbstractDispatcher extends EventDispatcher {

    public function AbstractDispatcher(target:IEventDispatcher = null) {
        super(target);
    }

}
}

Per inviare un evento su un'istanza:

var dispatcher:AbstractDispatcher = new AbstractDispatcher();
dispatcher.dispatchEvent(new Event(Event.CHANGE));

Per ascoltare gli eventi su un'istanza:

var dispatcher:AbstractDispatcher = new AbstractDispatcher();
dispatcher.addEventListener(Event.CHANGE, changeHandler);

function changeHandler(event:Event):void
{
}

Gestione degli eventi di base

Flash invia Events per la maggior parte dei suoi oggetti. Uno degli eventi più elementari è ENTER_FRAME , che viene inviato (al framerate del file SWF) su ogni oggetto della lista di visualizzazione.

import flash.display.Sprite;
import flash.events.Event;

var s:Sprite = new Sprite();
s.addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(e:Event)
{
    trace("I am called on every frame !");
}

Questa funzione sarà chiamata in modo asincrono su ogni frame. Ciò significa che la funzione che si assegna come onEnterFrame gestore di eventi viene elaborato prima di qualsiasi altro codice ActionScript che è collegato ai fotogrammi interessati.

Aggiungi i tuoi eventi

Puoi creare i tuoi eventi e inviarli, estendendo la classe Event .

import flash.events.Event;

class MyEvent extends Event
{
    var data: String;
    
    static public var MY_EVENT_TYPE = "my_event_my_event_code";

    public function MyEvent(type: String, data: String)
    {
        this.data = data;
    }
    
    override public function clone():Event
    {
        return new MyEvent(type, data);
    }
}

È quindi possibile inviarlo e ascoltarlo, utilizzando un EventDispatcher . Si noti che la maggior parte degli oggetti flash sono dispatcher di eventi.

import flash.events.EventDispatcher;

var d = new EventDispatcher();
d.addEventListener(MyEvent.MY_EVENT_TYPE, onType);

function onType(e: MyEvent)
{
    trace("I have a string: "+e.data);
}

d.dispatchEvent(new MyEvent(MyEvent.MY_EVENT_TYPE, "Hello events!"));

Nota che il metodo clone è richiesto se vuoi ridispatchare il tuo evento.

Struttura di eventi mouse semplice

Attraverso l'uso di event types di event types è possibile ridurre facilmente il bloat del codice che si verifica spesso quando si definiscono eventi per molti oggetti sul palco filtrando gli eventi in 1 funzione anziché definire molte funzioni di gestione degli eventi.

Immagina di avere 10 oggetti sul palco chiamati object1 , object2 ... object10

Potresti fare quanto segue:

var i: int = 1;
while(getChildByName("object"+i) != null){
    var obj = getChildByName("object"+i)
    obj.addEventListener(MouseEvent.CLICK, ObjectMouseEventHandler);
    obj.addEventListener(MouseEvent.MOUSE_OVER, ObjectMouseEventHandler);
    obj.addEventListener(MouseEvent.MOUSE_OUT, ObjectMouseEventHandler);
    obj.alpha = 0.75;
    i++;
}

function ObjectMouseEventHandler(evt:Event)
{
    if(evt.type == "click")
    {
        trace(evt.currentTarget + " has been clicked");
    }
    else
    {
        evt.currentTarget.alpha = evt.type == "mouseOver" ? 1 : 0.75;
    }
}

I vantaggi di questo metodo includono:

  1. Non è necessario specificare la quantità di oggetti su cui applicare gli eventi.
  2. Non ha bisogno di sapere in modo specifico quale oggetto è stato interagito con ancora applica ancora funzionalità.
  3. Applicando facilmente eventi in blocco.


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow