2009-12-01 3 views
5

나는 작은 게임을 개발 중이다. 나는 플레이어가 누른 키를 감지하기 위해 다음 코드를 사용얼마나 많은 누름 키가 플래시가 감지 할 수 있습니까? as3 사용하기

private function onKeyDown(event:KeyboardEvent):void { 
     //moviment keys 
     if (event.keyCode == 37 || event.keyCode == 65) { 
      this.leftKeyPressed = true; 
     } 
     if (event.keyCode == 39 || event.keyCode == 68) { 
      this.rightKeyPressed = true; 
     } 
     if (event.keyCode == 38 || event.keyCode == 87) { 
      this.upKeyPressed = true; 
     } 
     if (event.keyCode == 40 || event.keyCode == 83) { 
      this.downKeyPressed = true; 
     } 

     if (event.keyCode == this.shootKey) { 
      this.shootKeyPressed = true; 
     } 
    } 

onKeyUp에 이벤트 :

private function onKeyUp(event:KeyboardEvent):void { 
     if (event.keyCode == 37 || event.keyCode == 65) { 
      this.leftKeyPressed = false; 
     } 
     if (event.keyCode == 39 || event.keyCode == 68) { 
      this.rightKeyPressed = false; 
     } 
     if (event.keyCode == 38 || event.keyCode == 87) { 
      this.upKeyPressed = false; 
     } 
     if (event.keyCode == 40 || event.keyCode == 83) { 
      this.downKeyPressed = false; 
     } 
     if (event.keyCode == this.shootKey) { 
      this.shootKeyPressed = false; 
     } 
     if (event.keyCode == changeColorKey) { 
      trace('color key released'); 
      trace(getTimer()); 
      this.changeColorKeyPressed = true; 
     } 

    } 

는 기본적으로 shootKey 플레이어 거의 모든 시간으로 누르고됩니다. changeColorKey는 매우 자주 눌러 지지만 누르고 있지는 않습니다. 테스트하는 동안 shootKey 및 오른쪽 화살표를 누른 상태에서 changeColorKey에 대한 onKeyUp 이벤트가 발생하지 않는다고 언급했습니다. 오른쪽 화살표 대신 위 또는 아래 화살표 키를 누르고 있으면 동일한 효과가 나타납니다. 왼쪽 화살표 키를 누르고 있으면 이벤트가 시작됩니다. 왜 그럴 수 있니? 내 코드에 문제가 있습니까?

답변

4

표시되는 문제는 코드와 관련되어 있지 않지만 키보드와 관련되어 있습니다. 키보드 기술에 따라 동시에 누를 수있는 키의 수와 조합이 다릅니다. 2 년 전 당신의 코드와 매우 비슷한 코드를 작성했는데, 현재 키보드가 더 이상 사용되지 않는 동안 (예전의 키보드가 3 개를 지원하는 동안 최대 5 개의 동시 문자를 지원할 수있는 것처럼 보입니다) .

+0

그리고이 문제에 관한 몇 가지 기사 (키보드 해킹 방법조차도). http://www.extremetech.com/article2/02845230115100.asp http://www.extremetech.com/article2/02845165617700.asp 대개 USB로 보입니다. 키보드는 최대 6 개의 동시 키를 지원하므로 이전 키보드를 사용하면 업그레이드하는 것이 좋습니다. – LopSae

1

Keypoll 라이브러리 사용을 권장합니다. 여기에서 찾을 수 있습니다 : http://code.google.com/p/bigroom/wiki/KeyPoll.

몇 개의 키를 누르고 있을지 모르겠지만 Ctrl 키를 사용하여 시도해보십시오. 일반적으로 시프트는 한도에 포함되지 않습니다 (Flash/ActionScript에서는 테스트하지 않았습니다).

+0

KeyPoll 클래스를 사용해 보았지만 키 누르기와 동일한 문제가있었습니다. – Ricardo

+0

좋아, 그럼 플래시 제한. Ctrl 키를 사용하여 일부 기능을 시도 했습니까? –

2

문제는 하드웨어 키보드와 관련이 있다고 생각합니다. 내 키보드에서 직접 코드를 테스트 한 결과, USB 키보드가 아닌 다른 키보드에서 3 개 이상의 키를 동시에 누를 수 없습니다.

예를 들어 이제는 3 개 이상의 키를 누를 필요가 없으므로 문제가되지 않습니다. 하지만 조심해! 하드웨어 키보드에있는 것으로 보이는 또 다른 한계가 있으며, 서로 밀착되는 키의 근접성과 관련이 있습니다.

예를 들어, 코드를 테스트 할 때 KEY_UP (내가 계속 KEYING_UP 인 것) 옆에 KEYed_DOWN (계속 누름 의미) 키가있을 때 KEY_UP을받을 수없는 것처럼 보였습니다. 에 대한 key_up 이벤트). 그래서 나는 당신의 코드가 왼쪽 화살표 키로 만 작동하는 것이라고 믿습니다. 위, 아래 및 오른쪽 화살표 키는 아마도 어떻게 든 changeColorKey에 너무 가깝습니다.이 때문에 (키보드에서 회로가 수행되는 방식으로 인해 짐작할 수 있습니다.) 위로 상태를 트리거 할 수 없습니다.

shootKey 및/또는 changeColorKey를 다른 곳으로 멀리 이동하고 해당 키가 작동하는지 확인해보십시오.

관련 문제