Action Script 3 – vlastní události
16.1.2008· Autor: Ondřej Brichta·
Přidat komentář
Během tvorby flashových aplikací pro ActionScript 3.0 časem narazíme na problém, jak předávat událostem parametry, které lze v listenerech zpětně získat. Řešením je velice jednoduchá tvorba vlastních událostí.
Předávání parametrů
Pokud v ActionScriptu 3.0 používáme klasické listenery událostí, časem zjistíme, že pokud potřebujeme předávat přes tyto události jiné parametry, než nám samotná třída konkrétní události nabízí, máme do jisté míry smůlu. Takže si můžeme pomoci nějakou „globální" proměnnou, kterou při spuštění události změníme a ve funkci listenu této události jí ověříme a nebo si můžeme připravit vlastní událost, kterou bude možné volat s potřebným parametrem.
Vlastní událost můžeme vytvořit jako rozšíření třídy Events:
package {
import flash.events.Event;
public class ClockEvent extends flash.events.Event {
public static const MY_EVENT:String = "myevent";
public var _tick:int;
public function ClockEvent(val:int ) {
super(MY_EVENT);
this._tick = val;
}
}
}
Nová třída události se bude jmenovat ClockEvent a připravíme si v ní konstantu MY_EVENT, kterou následně použijeme v listeneru této události. Spolu s voláním této události požadujeme zadání hodnoty, kterou budeme mít možnost v listeneru této události převzít jako atribut s názvem „_tick".
Skript, který využívá připravenou třídu, vypadá takto:
var myTimer:Timer = new Timer(1000);
myTimer.addEventListener("timer", timerHandler);
myTimer.start();
var counter:Number = 0;
function timerHandler(evt:Event):void {
counter++;
if (counter==10) {
dispatchEvent(new ClockEvent(10));
counter = 0;
}
trace("timerHandler: " + evt);
}
import ClockEvent;
addEventListener(ClockEvent.MY_EVENT,clockListener);
function clockListener(evt:ClockEvent):void {
trace("clockHandler: " + evt);
trace(evt._tick);
}
Máme zde listener „timerHandler", který s frekvencí jedné sekundy vypisuje informaci o události timeru a jakmile uběhne 10 sekund, spustí nově vytvořenou událost „ClockEvent" s parametrem 10.
Protože máme k této události připojen listener „clockListener", můžeme jí detekovat a navíc lze zjistit i předanou hodnotu díky vlastnosti „_tick" detekované události.
Pokud bychom chtěli využít více konstant události, upravíme novou třídu do této podoby:
package {
import flash.events.Event;
public class ClockEvent extends flash.events.Event {
public static const MY_EVENT:String = "myevent";
public var _tick:int;
public function ClockEvent(type:String,val:int ) {
super(type);
this._tick = val;
}
}
}
Přičemž na straně aplikace musíme ve funkci „dispatchEvent" určit typ události (konstantu):
dispatchEvent(new ClockEvent(ClockEvent.MY_EVENT ,10));
Ondřej Brichta Vývojář multimediálních aplikací, šéfredaktor Flash.cz, školitel produktů Flash, Flex, Flash Media Server
Web:
http://www.obria.cz
|
Motto: <°))))><
Seriál:
Tipy a triky
Tipy a triky je seriál zaměřený na zajímavá řešení a vylepšení flashových aplikací