이벤트 처리의 기초Flash Player 9 이상, Adobe AIR 1.0 이상 이벤트는 SWF 파일에서 발생하는 동작이며 프로그래머에게 매우 중요합니다. 예를 들어 대부분의 SWF 파일은 사용자 상호 작용을 지원합니다. 이러한 상호 작용은 마우스 클릭에 응답하는 것처럼 간단할 수도 있고 양식에 입력된 데이터를 적용 및 처리하는 것처럼 복잡할 수도 있습니다. SWF 파일과의 이러한 상호 작용을 이벤트라고 합니다. 그러나 서버에서 데이터 로드를 마쳤을 때 또는 연결된 카메라가 활성화될 때와 같이 직접적인 사용자 상호 작용 없이도 이벤트가 발생할 수 있습니다. ActionScript 3.0에서 각 이벤트는 Event 클래스 또는 해당 하위 클래스의 인스턴스인 이벤트 객체로 나타냅니다. 이벤트 객체는 특정 이벤트에 대한 정보를 저장할 뿐만 아니라 해당 이벤트 객체를 쉽게 조작하는 데 사용할 수 있는 메서드도 포함합니다. 예를 들어 Flash Player 또는 AIR에서는 마우스 클릭을 감지하면 특정 마우스 클릭 이벤트를 나타내는 이벤트 객체(MouseEvent 클래스의 인스턴스)가 만들어집니다. 이벤트 객체를 만든 후에는 Flash Player 또는 AIR에서 이 이벤트 객체를 이벤트 대상 객체에 전달합니다. 전달되는 이벤트 객체의 대상으로 사용되는 객체를 이벤트 대상이라고 합니다. 예를 들어 연결된 카메라가 활성화되면 Flash Player에서 이벤트 객체를 직접 이벤트 대상에 전달하는데, 이 경우 이벤트 대상은 해당 카메라를 나타내는 객체입니다. 그러나 이벤트 대상이 표시 목록에 있는 경우에는 표시 목록 계층 구조를 통해 해당 표시 목록에서 이벤트 대상을 찾을 때까지 이벤트 객체가 전달됩니다. 경우에 따라서는 이벤트 객체가 같은 경로를 따라 표시 목록 계층 구조에서 다시 위로 "버블링"될 수도 있습니다. 이러한 표시 목록 계층 구조 순회를 이벤트 흐름이라고 합니다. 코드에서 이벤트 리스너를 사용하여 이벤트 객체를 "수신"할 수 있습니다. 이벤트 리스너는 특정 이벤트에 응답하기 위해 작성하는 함수 또는 메서드입니다. 프로그램에서 이벤트에 응답할 수 있도록 하려면 이벤트 대상 또는 이벤트 객체의 이벤트 흐름에 포함된 표시 목록 객체에 이벤트 리스너를 추가해야 합니다. 이벤트 리스너 코드를 작성할 때는 다음과 같은 기본 구조를 따릅니다. 여기서 굵게 표시된 요소는 특정한 경우에 입력하는 자리 표시자입니다. function eventResponse(eventObject:EventType):void { // Actions performed in response to the event go here. } eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse); 이 코드는 두 가지 작업을 수행합니다. 먼저 함수를 정의하여 이벤트에 대한 응답으로 수행할 작업을 지정할 수 있습니다. 그런 다음 소스 객체의 addEventListener() 메서드를 호출하여 지정된 이벤트에 대해 함수를 "제공"함으로써 이벤트 발생 시 함수 작업이 수행되도록 합니다. 실제로 이벤트가 발생하면 이벤트 대상이 이벤트 리스너로 등록된 모든 함수와 메서드 목록을 확인합니다. 그런 다음 각 함수와 이벤트를 차례로 호출하여 이벤트 객체를 매개 변수로 전달합니다. 이벤트 리스너를 직접 만들려면 이 코드에서 네 가지를 변경해야 합니다. 먼저 함수 이름을 사용자가 사용할 이름으로 변경해야 합니다. 코드에서 eventResponse라고 표시된 두 군데를 변경합니다. 두 번째로, 수신할 이벤트에서 전달한 이벤트 객체에 적절한 클래스 이름(코드에서는 EventType)을 지정해야 하며 특정 이벤트에 적절한 상수(샘플의 EVENT_NAME)를 지정해야 합니다. 세 번째로, 이벤트를 전달할 객체에서 addEventListener() 메서드(이 코드에서는 eventTarget)를 호출해야 합니다. 필요에 따라 함수의 매개 변수로 사용된 변수의 이름(이 코드에서는 eventObject)을 변경할 수 있습니다. 중요한 개념 및 용어이벤트 처리 루틴을 쓸 때 사용되는 중요한 용어들이 아래 참조 목록에 정리되어 있습니다.
|
|