키보드 입력 캡처

Flash Player 9 이상, Adobe AIR 1.0 이상

InteractiveObject 클래스에서 상호 작용 모델을 상속한 표시 객체는 이벤트 리스너를 사용하여 키보드 이벤트에 응답할 수 있습니다. 예를 들어 스테이지에 이벤트 리스너를 배치하여 키보드 입력을 수신하고 이에 응답할 수 있습니다. 다음 코드에서는 이벤트 리스너가 키보드 입력을 캡처하고 키 이름과 키 코드 속성이 표시됩니다.

function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace("Key Pressed: " + String.fromCharCode(event.charCode) +         " (character code: " + event.charCode + ")"); 
} 
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);

Ctrl 키와 같은 몇몇 키는 글리프 표현 없이도 이벤트를 생성합니다.

이전 코드 예제에서 키보드 이벤트 리스너는 전체 스테이지에 대한 키보드 입력을 캡처했습니다. 스테이지의 특정 표시 객체에 대한 이벤트 리스너를 작성할 수도 있습니다. 이 이벤트 리스너는 객체에 포커스가 맞춰지면 트리거됩니다.

다음 예제에서는 사용자가 TextField 인스턴스 내에 입력할 때만 입력한 키가 출력 패널에 반영됩니다. Shift 키를 누르고 있으면 TextField의 테두리 색상이 일시적으로 빨간색으로 바뀝니다.

이 코드는 스테이지에 tf라는 이름의 TextField 인스턴스가 있다고 가정합니다.

tf.border = true; 
tf.type = "input"; 
tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
tf.addEventListener(KeyboardEvent.KEY_UP,reportKeyUp); 
 
function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace("Key Pressed: " + String.fromCharCode(event.charCode) +         " (key code: " + event.keyCode + " character code: "         + event.charCode + ")"); 
    if (event.keyCode == Keyboard.SHIFT) tf.borderColor = 0xFF0000; 
} 
 
function reportKeyUp(event:KeyboardEvent):void 
{ 
    trace("Key Released: " + String.fromCharCode(event.charCode) +         " (key code: " + event.keyCode + " character code: " +         event.charCode + ")"); 
    if (event.keyCode == Keyboard.SHIFT) 
    { 
        tf.borderColor = 0x000000; 
    } 
}

또한 TextField 클래스는 textInput 이벤트를 보고하며, 사용자는 텍스트를 입력할 때 이를 수신할 수 있습니다. 자세한 내용은 텍스트 입력 캡처를 참조하십시오.

참고: AIR 런타임에서는 키보드 이벤트를 취소할 수 있지만 Flash Player 런타임에서는 키보드 이벤트를 취소할 수 없습니다.

키 코드 및 문자 코드

키보드 이벤트의 keyCodecharCode 속성에 액세스하여 어떤 키를 눌렀는지 확인하고 다른 액션을 트리거할 수 있습니다. keyCode 속성은 키보드의 특정 키 값에 해당하는 숫자 값이고, charCode 속성은 현재의 문자 세트에서 해당 키가 가지는 숫자 값입니다. 이때 기본 문자 집합은 ASCII를 지원하는 UTF-8입니다.

키 코드와 문자 값에는 주요한 차이가 있는데, 키 코드 값은 키보드의 특정 키를 나타내고(키패드의 1 키는 키보드 상단의 1 키와 다르지만 "1"을 입력하는 키와 "!"를 입력하는 키는 동일), 문자 값은 특정 문자를 나타냅니다(R 문자와 r 문자는 서로 다름).

참고: 키와 ASCII의 문자 코드 값 간의 매핑은 Adobe Flash 플랫폼용 Adobe ActionScript 3.0 참조 설명서에서 flash.ui.Keyboard 클래스를 참조하십시오.

키와 키 코드의 매핑은 장치 및 운영 체제에 따라 다릅니다. 따라서 키 매핑을 사용하여 액션을 트리거해서는 안 됩니다. 대신에 Keyboard 클래스에서 제공하는 미리 정의된 상수 값을 사용하여 적당한 keyCode 속성을 참조해야 합니다. 예를 들어 Shift 키의 키 매핑 대신 Keyboard.SHIFT 상수를 사용하십시오(위의 코드 샘플 참조).

KeyboardEvent 우선 순위

다른 이벤트와 마찬가지로 키보드 이벤트 시퀀스도 addEventListener() 메서드의 코드 내 지정 순서가 아닌 표시 객체의 계층 구조에 의해 결정됩니다.

예를 들어 다음 예제와 같이 container라는 동영상 클립 내에 tf 텍스트 필드를 배치하고 두 인스턴스에 키보드 이벤트의 이벤트 리스너를 추가하는 경우가 있을 수 있습니다.

container.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
container.tf.border = true; 
container.tf.type = "input"; 
container.tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); 
 
function reportKeyDown(event:KeyboardEvent):void 
{ 
    trace(event.currentTarget.name + " hears key press: " +         String.fromCharCode(event.charCode) + " (key code: " +         event.keyCode + " character code: " + event.charCode + ")"); 
}

텍스트 필드와 부모 컨테이너에 모두 리스너가 있기 때문에 텍스트 필드에 키를 입력할 때마다 reportKeyDown() 함수가 두 번씩 호출됩니다. 키를 하나 누르면 텍스트 필드가 이벤트를 전달하고 그 뒤에 container 동영상 클립이 이벤트를 전달합니다.

운영 체제와 웹 브라우저는 Adobe Flash Player 또는 AIR에 앞서 키보드 이벤트를 처리합니다. 예를 들어 Microsoft Internet Explorer에서 Ctrl+W를 누르면 포함된 SWF 파일이 키보드 이벤트를 전달하기 전에 브라우저 윈도우가 닫힙니다.