Podstawy obsługi zdarzeń

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Zdarzenia mogą być traktowane jako wystąpienia dowolnego typu w pliku SWF, które są interesujące dla programisty. Na przykład: większość plików SWF obsługuje niektóre typy interakcji z użytkownikiem — mogą to być operacje tak proste, jak kliknięcie przyciskiem myszy lub operacje bardziej złożone, jak akceptowanie i przetwarzanie danych wprowadzonych do formularza. Każda taka interakcja użytkownika z plikiem SWF jest traktowana jako zdarzenie. Zdarzenia mogą również występować bez bezpośredniej interakcji użytkownika, np. zakończenie ładowania danych z serwera lub aktywacja dołączonego aparatu.

W języku ActionScript 3.0 każde zdarzenie jest reprezentowane przez obiekt zdarzenia, który jest instancją klasy Event lub jednej z jej podklas. Obiekt zdarzenia nie tylko przechowuje informacje o określonym zdarzeniu, ale również zawiera metody umożliwiające manipulowanie obiektem zdarzenia. Na przykład: gdy program Flash Player lub AIR wykryje kliknięcie, tworzy obiekt zdarzenia (instancję klasy MouseEvent), który reprezentuje konkretne zdarzenie click.

Po utworzeniu obiektu zdarzenia program Flash Player lub AIR wywołuje zdarzenie, co oznacza, że obiekt zdarzenia jest przekazywany do obiektu, który jest celem zdarzenia. Obiekt, który służy jako cel dla wywołanego obiektu zdarzenia, jest nazywany celem zdarzenia . Na przykład: gdy dołączony aparat stanie się aktywny, program Flash Player wywoła obiekt zdarzenia bezpośrednio do celu zdarzenia, którym w tym przypadku jest obiekt reprezentujący aparat. Jeśli jednak cel zdarzenia znajduje się na liście wyświetlania, wówczas obiekt zdarzenia jest przekazywany w hierarchii listy wyświetlania, aż dotrze do celu zdarzenia. Następnie w niektórych przypadkach obiekt zdarzenia „propaguje” z powrotem do hierarchii listy wyświetlania po tej samej trasie. Takie przejście przez hierarchię listy wyświetlania jest określane jako strumień zdarzenia .

Obiekty zdarzeń można wykrywać w kodzie za pomocą detektorów zdarzeń. Detektory zdarzeń to funkcje lub metody pisane w celu odpowiadania na określone zdarzenia. Aby zapewnić odpowiedź programu na zdarzenia, należy dodać detektory zdarzeń do celu zdarzenia lub do dowolnego obiektu listy wyświetlania, który jest częścią strumienia zdarzenia obiektu zdarzenia.

Zawsze kod detektora zdarzeń jest zgodny z podstawową strukturą (elementy pogrubione są elementami zastępczymi, które są zastępowane w określonych przypadkach):

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

Ten kod ma dwie funkcje. Najpierw definiuje funkcję, która jest sposobem określania czynności, jakie będą wykonywane w odpowiedzi na zdarzenie. Następnie wywołuje metodę addEventListener() obiektu źródłowego, co powoduje „zasubskrybowanie” funkcji do określonego zdarzenia, przez co po wystąpieniu zdarzenia wykonywane są operacje funkcji. Gdy zdarzenie wystąpi, cel zdarzenia sprawdza własną listę wszystkich funkcji i metod, które są zarejestrowane jako detektory zdarzeń. Następnie wywołuje kolejno poszczególne funkcje i metody, przekazując obiekt zdarzenia jako parametr.

W celu utworzenia niestandardowego detektora zdarzeń należy zmodyfikować cztery elementy kodu. Najpierw należy zmienić nazwę funkcji na nazwę, która będzie używana (zmiana w dwóch miejscach, w których w kodzie znajduje się wyrażenie eventResponse ). Po drugie: należy określić odpowiednią nazwę klasy obiektu zdarzenia, która zostanie wywołana przez zdarzenie, które ma być wykrywane ( EventType w kodzie), a także określić odpowiednią stałą dla konkretnego zdarzenia ( EVENT_NAME w kodzie). Po trzecie: należy wywołać metodę addEventListener() dla obiektu, który wywoła zdarzenie ( eventTarget w tym kodzie). Opcjonalnie można zmienić nazwę zmiennej używanej jako parametr funkcji ( eventObject w tym kodzie).

Ważne pojęcia i terminy

Na poniższej liście zebrano ważne terminy używane w kontekście pisania podprogramów obsługi zdarzeń:

Propagacja
Niektóre zdarzenia są propagowane, dzięki czemu nadrzędny obiekt wyświetlany może reagować na zdarzenia wywoływane przez jego obiekty podrzędne.

Faza propagacji
Etap strumienia zdarzenia, w którym zdarzenie jest propagowane do nadrzędnych obiektów wyświetlanych. Faza propagacji następuje po fazie przechwytywania i fazie celu.

Faza przechwytywania
Etap strumienia zdarzenia, w którym zdarzenie jest propagowane w dół od najbardziej ogólnego celu do najbardziej zawężonego obiektu docelowego. Faza przechwytywania następuje przed fazą celu i fazą propagacji.

Zachowanie domyślne
Niektóre zdarzenia zawierają zachowanie, które normalnie występuje wraz ze zdarzeniem — takie zachowanie jest nazywane domyślnym. Na przykład: gdy użytkownik wpisuje tekst do pola tekstowego, generowane jest zdarzenie wprowadzania tekstu. Zachowaniem domyślnym dla tego zdarzenia jest wyświetlanie znaku, który został wpisany do pola tekstowego — jednak takie zachowanie domyślne można zastąpić (jeśli z jakiegoś powodu wyświetlanie wpisanego znaku nie jest pożądane).

Wywoływanie
Powiadamianie detektorów zdarzeń o wystąpieniu zdarzenia.

Zdarzenie
Coś, co dzieje się z obiektem, o czym ten obiekt może powiadomić inne obiekty.

Strumień zdarzenia
Strumień zdarzenia: gdy zdarzenia mają miejsce dla obiektu z listy wyświetlania (obiekt wyświetlony na ekranie), wówczas wszystkie obiekty, które zawierają ten obiekt są powiadamiane o zdarzeniu i powiadamiają własne detektory zdarzeń. Ten proces rozpoczyna się od stołu montażowego i jest kontynuowany przez całą listę wyświetlania do obiektu, w którym rzeczywiście wystąpiło zdarzenie, następnie proces wraca do stołu montażowego. Ten proces jest określany jako strumień zdarzenia.

Obiekt zdarzenia
Obiekt, który zawiera informacje dotyczące konkretnego wystąpienia zdarzenia, które są wysyłane do wszystkich detektorów po wywołaniu zdarzenia.

Cel zdarzenia
Obiekt, który wywołuje zdarzenie. Przykład: gdy użytkownik kliknie przycisk, który znajduje się wewnątrz ikonki na stole montażowym, wszystkie te obiekty wywołują zdarzenia, ale celem zdarzenia jest ten obiekt, w którym zdarzenie rzeczywiści wystąpiło — w tym przypadku jest to kliknięty przycisk.

Detektor
Obiekt lub funkcja, który/-a zarejestrował(a) się w obiekcie w celu wskazania, że chce otrzymać powiadomienie w przypadku wystąpienia określonego zdarzenia.

Faza celu
Punkt strumienia zdarzeń, w którym zdarzenie dotarło do najściślej zdefiniowanego celu. Faza celu ma miejsce między fazą przechwytywania a fazą propagacji.