Vnímáme v zásadě dva druhy událostí: on() a onClipEvent().
Nejdříve si osvojíte první typ událostí. Události musí být vždy vloženy do nějakého symbolu - buď domovie clipu nebo do buttonu. V žádném případě nemůžete událost nacpat do keyframu na časové ose, neboť události on() se spuštějí určitou činností myši a tak docela těžko v animaci kliknete na sedmnáctý snímek animace, kde máte nějakou událost. Pokud se přeci jen pokusíte umístit událost do časové osy, Flash vám zařve a vyhodí chybu. A teď již k jednotlivým událostem:
událost | kdy se spustí |
on (press) {příkazy} | příkazy v závorkách se provedou po stisknutí levého tlačítka myši na objekt či tlačítko |
---|---|
on (release) | příkazy se provedou po kliknutí na tlačítko a následném odkliknuti |
on (releaseOutside) | událost se spustí když kliknete na tlačítko a odkliknete mimo tlačítko |
on (rollOver) | příkazy se provedou, když kurzor myši přejede přes daný objekt |
on (rollOut) | příkazy se provedou, když kurzor opustí určený objekt |
on (dragOver) | příkazy se provedou když přes tlačítko přejedete myší se stisknutým tlačítkem |
on (dragOut) | příkazy se provedou, když kliknete na tlačítko a přesunete kurzor mimo tlačítko |
on(keyPress "<enter>") | příkazy se provedou po stiskuntí určené klávesy, v tomto případě entru. |
on (release) { stop(); }Tím zajistíte, že když kliknete na toto tlačítko, zastaví se hlavní časová osa a tím pádem i celá vaše animace, kterou jste vytvořili. K druhému tlačítku poté přidejte tento skript:
on (rollOver) { play(); }Pokud kliknutím na první button zastavíte časovou osu, pouhým přejetím kurzorem přes druhé tlačítko se časová osa opět rozeběhne. Myslím, že už je dost jasné, jak tyto události fungují. Jen ještě jedno malé upozornění. To, že v závorkách za stop(); není žádná hodnota neznamená, že tam ty závorky být nemusí. MUSÍ!!! Jinak vám příklad nebude fungovat.
Někdy vám však nebude nestačit, aby byly příkazy spouštěny až když uživatel něco udělá. Určitě se dostanete do sitauce, kdy potřebujete, aby se příkazy prováděly opakovaně pořád dokola nebo aby se příkazy provedly až po načtení nějakého většího objektu. Přesně k tomu slouží události onClipEvent():
událost | jak probíhá |
onClipEvent(load) | příkazy se spustí až se klip, ke kterému je tento skript připojen, celý načte. |
---|---|
onClipEvent(unload) | příkazy se spustí, když klip opustí scénu |
onClipEvent(enterFrame) | tento ovladač událostí se opakuje každý snímek znova. To znamená, že pokud máte frame rate 12, budou příkazy provedeny dvanáctkrát za vteřinu. |
onClipEvent(mouseDown) | příkazy se provedou jakmile uživatel klikne myší (kdekoliv) |
onClipEvent(mouseUp) | příkazy se provedou když uživatel odklikne (taktéž kdekoliv) |
onClipEvent(mouseMove) | příkazy se budou provádět při každém pohybu myši |
onClipEvent(keyDown) | akce se spouští kdykoliv stisknete jakoukoliv klávesu |
onClipEvent(keyUp) | příkazy jsou spuštěny když stisknete a následně uvolníte nějakou klávesu |
onClipEvent(data) | spouští příkazy až po úplném načtení nějakého externího zdroje |
Opět jednoduchý příklad. Vytvořte si nový movie clip, do kterého nakreslete čáru (ne moc velkou) a zarovnejte ji na střed. Vložte movie clip čáry do hlavní scény a poté tomuto movie clipu v hlavní scéně přiřaďte tento skript:
onClipEvent(enterFrame) { this._rotation+=3; }
Příkaz _rotation určuje rotaci klipu a this zase, že se skript vztahuje na tento movie clip. A teď jak bude program uvažovat.
Skript bude vyhodnocovám každý snímek znova a znova, to znamená, že v každém snímku se zvýší rotace čáry o tři stupně a čára se tak bude otáčet, aniž bychom ji sami zanimovali.
Neboli - trochu podrobněji - při načítání má čára nulovou rotaci. Animace se celá načte a provedou se skripty na prvním snímku a také na všech symbolech v prvním snímku. Předchozí skript tedy říká, že se má rotace zvýšit o 3, tj. na 3. Program tak učiní a jelikož už nikde jinde žádná skripta nejsou, program pokračuje dál. V hlavní scéně je pouze jeden snímek, tudíž se animace "vrátí" na první snímek a opět opakuje skript, který je na movie clipu a zase se zvýší rotace o tři, tentkokrát již na 6. A tak dále pořád znova a znova, dá se říci až do nekonečna, čímž se vytvoří dojem pomalého otáčení.
Naproti tomu kdybyste použili stejné příkazy ale pod událostí load, otočila by se čára pouze jednou, protože se příkazy provádí pouze když se čára načte do paměti. Přepište enterFrame na load a zvyšte rotaci na 45:
onClipEvent(load) { this._rotation+=45; }
Čára se skutečeně otočí pouze o 45 stupňů.