diary       blog       guest

Key.ENTER와 Key.ESCAPE 이벤트 발생 방법

http://www.action-scripter.com/blog/trackback/926
간혹 Key.class를 이용해서 작업을 할때 레퍼런스에도 있는 몇 개 key가 제대로 실행이 되지 않는 경우를 종종 겸험 하셨을 거라 생각됩니다. 먼저 그 문제를 해결하기 위해서는 아래 있는 fscommand("trapallkeys", "true"); 코드를 먼저 선언해 주어야 합니다.

fscommand("trapallkeys", "true");   // 이 코드가 빠지면 ENTER, ESCAPE key가 먹지 않습니다.

btnCall = function(){
   if(Key.isDown(Key.LEFT)){
      test.text = "왼쪽";
   }else if(Key.isDown(Key.RIGHT)){
      test.text = "오른쪽";
   }else if(Key.isDown(Key.ESCAPE)){
      test.text = "Esc";
   }else if(Key.isDown(Key.ENTER)){
      test.text = "엔터";
   };
};

this.keyObject = new Object();
this.keyObject.onKeyDown = this.btnCall;
Key.addListener(this.keyObject);

이렇게 만들고 TestMovie를 실행해 보면 실행이 안됩니다.
하지만 swf를 클릭해서 플래시 플레이어에서 실행을 하면 제대로 실행이 되지요..
신기하죠(?).. 암튼.. 플래시 플레이어에서 실행되는 모습을 확인할 수 있습니다.

그러나 더 큰 문제가 있습니다.
바로 웹 브라우저에서는 실행이 되지 않는다는 것이죠..
웹상에서는 플래시 플레이어 혼자서 실행이 되는 것이 아니라는 점입니다.
웹 브라우저 안에서 플래시 플레이어가 실행되기 때문에 위 소스를 웹에서 테스트 해보면 ESCAPE 키가 실행이 되지 않습니다.
이유는 저도 잘 모르지만 웹 브라우저와 플래시 플레이어 사이의 미묘한 관계가 아닐까 생각됩니다.
그렇다면 해결책은 없는 것일까요?

이럴때는 이것 저것 편법을 사용해 보자구요..
일단 위 코드처럼 Key 리스너가 실행되는 순간만을 체크하지 말고 setInterval을 통해 좀더 세밀하게 key 리스너 실행여부를 확인해 보도록 하면 어떨까요?

fscommand("trapallkeys", "true");

function btnCall(){
   if(Key.isDown(Key.LEFT)){
      test.text = "왼쪽";
   }else if(Key.isDown(Key.RIGHT)){
      test.text = "오른쪽";
   }else if(Key.isDown(Key.ESCAPE)){
      test.text = "Esc";
   }else if(Key.isDown(Key.ENTER)){
      test.text = "엔터";
   };
};

setInterval(btnCall,10);

자 이제 웹 브라우저에서 실행을 해 보세요?
어떤가요? 잘 실행이 되지요..
물론 웹 브라우저의 포커스는 플래시에 있어야 합니다.

■ 이 방법은 flashmx-coders : 전상훈님의 글을 참조 했습니다.
2002/12/15 11:40 2002/12/15 11:40
   1   ... 1278  1279  1280  1281  1282  1283  1284  1285    
ABOUT  |  WORKS  |  @seonggyu
COPYRIGHT ⓒ 2000 - 2010. ACTION-SCRIPTER.COM. ALL RIGHTS RESEVED.