2011-02-10 2 views
0

나는 약 20 레벨의 게임을 제작 중입니다. 이제는 스페이스 바 키를 사용하여 "건너 뛰기"옵션을 게임에 추가하려고 할 때 생각했습니다. 스페이스 바를 누르고 있으면 KeyboardEvent.KEY_DOWN 이벤트가 여러 번 발생하므로 조금 문제가 있습니다.AS3에서 다음 게임 레벨로 건너 뛰기

위 시나리오 (Keydown 및 키 업)는 플레이어 캐릭터를 화면에서 움직이려고 할 때 잘 작동합니다. 내 머리 속에 떠오르는 한 가지 주요 관심사는 입니다. "KeyboardEvent 레벨을 변경할 때 청취자가 제거되고 추가 되었기 때문에 잘못 되었나요?"

P.S : 건너 뛰기 옵션을 버튼으로 추가하면 정상적으로 작동하지만 스페이스 바를 사용하면 편리합니다.

답변

4

듣고 KeyboardEvent.KEY_UP도 수신하고 스위치 역할을하는 부울을 유지하십시오. 키보드를 누르고 부울 값이 false이면 부울 값을 true로 설정하고 계속합니다. 그런 다음 key_up 이벤트 콜백이 호출되면 부울을 false로 재설정합니다.

+0

이 방법을 사용해 보았습니다. 그러나 나는이 질문에서 언급했듯이 저것은 저를 위해 작동하지 않았다. 열쇠 수신기가 호출되지 않아도 정리하는 동안 키 수신기가 제거 될 때 자동으로 호출되기 때문에 아마 그렇게 생각합니다. 스페이스 바 키 누름 확인과 함께 프레임 카운트를 지연으로 사용하여이 문제를 해결했습니다. 고맙습니다. – Vishnu

1

somethig이 (가)이 기능을 사용합니까?

private function levelInit() : { 
    // ... 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener); 
    // ... 
} 

private function keyDownListener (e : KeyboardEvent) : void { 
    if (e.keyCode == Keyboard.SPACE) { 
    stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownListener); 
    // add stuff to initiate the level skip 
    } 
} 

또한 일을 더 보호하기 위해 리스너를 추가 지연하는 setTimeout에서 stage.addEventListener를 호출 할 수 있습니다.

+0

keyDownListener에서 removeEventListener를 구현하려고 시도하지 않았습니다. – Vishnu

+1

6NSString 윤곽선이 작동하지 않는 플래그 메서드가 작동하지 않으면 키를 누르고있을 때 리스너가 반복적으로 호출되지 않습니다. 일단 키 스트로크를 처리 할 수있는 상태로 돌아 오면, 리스너를 다시 추가 할 수 있습니다. – mpdonadio

+0

와우 ..... 고마워! – Vishnu

1

함수에서 key_down 리스너를 제거하고 key_up 리스너를 추가하십시오. 그런 다음 key_up 함수에서 해당 리스너를 제거하고 key_down 리스너를 다시 추가합니다.