Grundläggande om händelsehantering

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Händelser är olika typer av förekomster i den SWF-fil som du ska arbeta med som programmerare. De flesta SWF-filer stöder till exempel användarinteraktion av någon typ — vare sig det rör sig om något så enkelt som att svara med en musklickning, eller något mer avancerat som att godta och bearbeta data som har angetts i ett formulär. All sådan användarinteraktion med en SWF-fil anses vara en händelse. Händelser kan även inträffa utan någon användarinteraktion, som när data har lästs in från en server eller när en bifogad kamera har aktiverats.

I ActionScript 3.0 representeras varje händelse av ett händelseobjekt, som är en instans av klassen Event eller någon av dess underklasser. I ett händelseobjekt sparas inte bara information om en specifik händelse. Objektet innehåller även metoder som underlättar hanteringen av händelseobjektet. När Flash Player eller AIR identifierar en musklickning, skapas ett händelseobjekt (en instans av klassen MouseEvent) som ska representera den specifika musklickningshändelsen.

När ett händelseobjekt har skapats skickar Flash Player eller AIR objektet, vilket innebär att händelseobjektet överförs till objektet som är målet för händelsen. Ett objekt som fungerar som mål för ett skickat händelseobjekt kallas för ett händelsemål. När till exempel en bifogad kamera aktiveras, skickar Flash Player ett händelseobjekt direkt till händelsemålet, som i det här fallet är objektet som representerar kameran. Om händelsemålet däremot finns i visningslistan, överförs händelseobjektet nedåt i visningslistans hierarki tills det når händelsemålet. I vissa fall ”bubblar” sedan händelseobjekt tillbaka uppåt i visningslistans hierarki längs samma väg. Den här förflyttningen eller gången i visningslistans hierarki kallas för händelseflödet.

Du kan ”lyssna” efter händelseobjekt i kod med hjälp av händelseavlyssnare. Händelseavlyssnare är funktioner eller metoder som svarar på specifika händelser. För att se till att ditt program svarar på händelser måste du lägga till händelseavlyssnare till antingen händelsemålet eller till ett visningslisteobjekt som ingår i ett händelseobjekts händelseflöde.

Varje gång du skriver händelseavlyssnarkod har koden följande grundläggande struktur (element i fet stil är platshållare som du fyller i med information som är lämplig i ditt specifika fall):

function eventResponse(eventObject:EventType):void 
{ 
    // Actions performed in response to the event go here. 
} 
 
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);

Den här koden gör två saker. Först definierar den en funktion, vilket anger åtgärderna som ska utföras som svar på händelsen. Därefter anropar den metoden addEventListener() för källobjektet, vilket kopplar funktionen till den angivna händelsen. Därmed utförs funktionens åtgärder varje gång händelsen inträffar. När händelsen verkligen inträffar, kontrollerar händelsemålet dess lista över alla funktioner och metoder som är registrerade som händelseavlyssnare. Därefter anropas var och en i tur och ordning och händelseobjektet skickas som en parameter.

Du måste ändra fyra saker i den här koden för att skapa din egen händelseavlyssnare. Först måste du ändra namnet på funktionen till det namn som du vill använda (namnet måste ändras på två platser, där koden anger eventResponse). Sedan måste du ange lämpligt klassnamn för händelseobjektet som skickas av händelsen som du vill lyssna efter (EventType i koden) och ange lämplig konstant för den specifika händelsen (EVENT_NAME i exemplet). Det tredje steget innebär att du anropar metoden addEventListener() i objektet som ska skicka händelsen (eventTarget i den här koden). Om du vill kan du som ett fjärde steg ändra namnet på variabeln som används som funktionens parameter (eventObject i den här koden).

Viktiga termer och begrepp

Följande referenslista innehåller viktiga termer som du kommer att stöta på när du skriver händelsehanteringsrutiner:

Bubbling
Bubbling sker för vissa händelser så att ett överordnat visningsobjekt kan svara på händelser som skickas av dess underordnade objekt.

Bubblingsfas
Den del av händelseflödet i vilken en händelse sprids uppåt till de överordnade visningsobjekten. Bubblingsfasen inträffar efter hämtnings- och målfaserna.

Hämtningsfas
Den del av händelseflödet i vilken en händelse sprids nedåt från det mest allmänna målet till det mest specifika målobjektet. Hämtningsfasen inträffar före mål- och bubblingsfaserna.

Standardbeteende
Vissa händelser innehåller ett beteende som normalt inträffar tillsammans med händelsen. Detta kallas standardbeteende. När användaren till exempel skriver text i ett textfält, kan en textinmatningshändelse utlösas. Standardbeteendet för den händelsen är att visa tecknet som skrevs i textfältet, men du kan åsidosätta standardbeteendet (om du av någon anledning inte vill att det skrivna tecknet ska visas).

Skicka
Att meddela händelseavlyssnare om att en händelse har inträffat.

Händelse
Något som sker med ett objekt och som objektet kan informera andra objekt om.

Händelseflöde
När händelser inträffar för ett objekt i visningslistan (ett objekt som visas på skärmen) meddelas alla objekt som innehåller objektet om händelsen. De objekten meddelar sedan i sin tur sina händelseavlyssnare. Den här processen börjar med scenen och fortsätter sedan igenom visningslistan till det faktiska objekt där händelsen inträffade. Sedan fortsätter processen tillbaka till scenen igen. Processen kallas även för händelseflödet.

Event-objektet
Ett objekt som innehåller information om en viss händelses förekomst, som skickas till alla avlyssnare när en händelse skickas.

Händelsemål
Det objekt som verkligen skickar en händelse. Om användaren till exempel klickar på en knapp som finns i ett sprite-objekt, som i sin tur finns på scenen, skickar alla de objekten händelser, men händelsemålet är den där händelsen faktiskt inträffade (den klickade knappen i det här fallet).

Lyssnare
Ett objekt eller en funktion som har registrerat sig själv med ett objekt för att ange att det eller den vill meddelas när en viss händelse inträffar.

Målfas
Den punkt i ett händelseflöde där en händelse har nått det mest specifika mål som är möjligt. Målfasen inträffar mellan hämtnings- och bubblingsfaserna.