Vytváření vlastních událostí – flash

V actionscriptu můžeme vytvářet vlastní události a pomocí nich ovládat(spouštět) jiné funkce. Např. až se rozsvítí na semaforu (semafor_mc) zelená, auto (auto_mc) projede. Na konci movieclipu semafor_mc bude generovaná vlastní událost, která spustí auto_mc. Na konci animace auto_mc bude generovaná událost, která spustí semafor_mc

Příklad:

Vytvoření události

Události (Event) se vytváří pomocí příkazu DispatchEvent (dispatch = vyslat)

DispatchEvent(New Event("NováUdálost"));

Tento příkaz vytvoří novou událost, která ponese označení (název) podle textu uvnitř uvozovek. Událost se vygeneruje na tom místě časové osy, kde chceme. (Např, na konci animace Movieclipu – vyšle informace o tom, že ten Movieclip skončil.)

DispatchEvent(New Event("KONEC_SEMAFOR"));

Zachycení a zpracování události

Událost zachytí posluchač – EventListener, který je přiřazený k objektu, který se má poslouchat (tj. objektu uvnitř kterého je událost generována).

Movieclip_mc.addEventListener("NováUdálost",JménoObluhyUdálosti)
 
//Např:
 
semafor_mc.addEventListener("KONEC_SEMAFOR", AutoSpust)

Obsluha události

funkce, která je spuštěna vygenerovanou událostí, má speciální zápis: Místo e:MouseEvent, se zapisuje e:Event

funciton JménoObsluhyUdálosti(e:Event) {
tělo funkce - co se má vykonat
}
 
// Např:
 
funciton AutoSpust(e:Event) {
auto_mc.play();
}

Přidání posluchače události

Posluchače události můžeme přidat movieclipu nebo tlačítku (objektu, který se dá pojmenovat). Umožňuje nám poslouchat např. události myši (kliknutí, najetí myši apod.) a nebo také generované události uvnitř objektu, kterému byl posluchač přiřazen.

addEventListener //přidavač posluchaře události
Movieclip_mc.addEventListener("NováUdálost",JménoObluhyUdálosti) //celá formulace
//Např.
semafor_mc.addEventListener("KONEC_SEMAFOR", AutoSpust)

Odebrání posluchače události

Posluchače události můžeme také objektům ubírat. Např. chceme-li, aby se při kliknutí na tlačítko spustila animace a aby se mohla znovu přehrát až po skončení animace. Bez odebrání posluchače by bylo možné animaci spustit nebo ji začít spouštět znovu od začátku (při příkazu gotoAndPlay(0)) kdykoliv v průběhu přehrávání animace. Tomu se vyhneme tím, že při začátku animace tlačítku posluchače událostí odebereme a při skončení opět vrátíme.

removeEventListener //odebrání posluchače události
Movieclip_mc.addEventListener("NováUdálost",JménoObluhyUdálosti) //celá formulace
//Např.
semafor_mc.removeEventListener("KONEC_SEMAFOR", AutoSpust) //formulace je stejná jako u přidávání, jen se add změní na remove

Vytváření vlastních událostí – příklad

Rybičky v akvárku – propluje jedna, vygeneruje událost, která spustí druhou, atd.

import flash.events.Event;
 
ryba2_mc.stop();
 
ryba1_mc.addEventListener("KONEC_RYBA1",spustRybu2);
ryba2_mc.addEventListener("KONEC_RYBA2",spustRybu1);
 
function spustRybu2(e:Event){
	ryba2_mc.play()
	ryba1_mc.stop()
	}
 
function spustRybu1(e:Event){
	ryba1_mc.play()
	ryba2_mc.stop()
	}
 
//na konci animace uvnitř movieclipu ryba1_mc, se generuje tato událost:
dispatchEvent(new Event("KONEC_RYBA1"));
 
//na konci animace uvnitř movieclipu ryba2_mc:
dispatchEvent(new Event("KONEC_RYBA2"));

Zdroj: vlastniudalosti_rybicky_start.zip

Přidávání a ubírání posluchačů – příklad 2

Spustí animaci kliknutím na libovolnou rybu, pak už klikat na ryby nejde a animace se stále opakuje.

import flash.events.Event;
ryba1_mc.stop();
ryba2_mc.stop();
 
ryba1_mc.addEventListener("KONEC_RYBA1",spustRybu2);
ryba2_mc.addEventListener("KONEC_RYBA2",spustRybu1);
 
ryba1_mc.addEventListener(MouseEvent.CLICK,zacniStafetu);
ryba2_mc.addEventListener(MouseEvent.CLICK,zacniStafetu);
 
function zacniStafetu(e:Event){
	e.currentTarget.play(); //spustí ten movieclip, na který se kliklo - e.currentTarget se nahradí jménem označného movieclipu
	ryba1_mc.removeEventListener(MouseEvent.CLICK,zacniStafetu); 
	ryba2_mc.removeEventListener(MouseEvent.CLICK,zacniStafetu);
	}
 
function spustRybu2(e:Event){
	ryba2_mc.play()
	ryba1_mc.stop()
	}
 
function spustRybu1(e:Event){
	ryba1_mc.play()
	ryba2_mc.stop()
	}

Zdroj: vlastniudalosti_rybicky_hotove.zip


Posted

in

by

Tags: