저는 키 입력을 받아들이 기 위해 AIR를 사용하여 표준 키보드 제어 게임을 얻으려고합니다. 이 게임은 한 방향으로 달리고 다른 방향으로 빨리 돌아갈 수있는 능력이 필요합니다. 그러나 키 "A"에서 "D"로 연속해서 전환 할 때 잠시 동안 내 캐릭터가 멈추고 마치 ON_KEY_DOWN 이벤트에서 내 캐릭터를 움직이는 것처럼 계속됩니다. 부울 값을 사용하여 문자를 이동하는 데 ENTER_FRAME을 사용하는 방법을 이해하고 다른 사람들이 자습서를 본 적이 있습니다. 자습서에서도 이와 똑같은 문제가 있음을 알았습니다. 이-SOLVED- 신속하게 키를 전환 할 때 방금 누르는 키에 대해 내 KEY_UP 이벤트가 실행되는 이유는 무엇입니까?
public static function initialize(s:Stage, autoClear:Boolean = true):void {
if(initialized) {
return;
}
initialized = true;
if(autoClear) {
s.addEventListener(Event.ENTER_FRAME, handleEnterFrame, false, -1000, true); /// Very low priority.
}
s.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown, false, 0, true);
s.addEventListener(KeyboardEvent.KEY_UP, handleKeyUp, false, 0, true);
s.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp, false, 0, true);
s.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown, false, 0, true);
s.addEventListener(MouseEvent.MOUSE_MOVE, handleMouseMove, false, 0, true);
s.addEventListener(Event.MOUSE_LEAVE, handleMouseLeave, false, 0, true);
s.addEventListener(Event.DEACTIVATE, handleDeactivate, false, 0, true);
stage = s;
}
/**
* Record a key down, and count it as a key press if the key isn't down already.
*/
public static function handleKeyDown(e:KeyboardEvent):void {
if(!keysDown[e.keyCode]) {
keysPressed[e.keyCode] = true;
keysDown[e.keyCode] = true;
}
}
/**
* Record a key up.
*/
public static function handleKeyUp(e:KeyboardEvent):void {
keysUp[e.keyCode] = true;
delete keysDown[e.keyCode];
}
(이 이상한 문제를 연구하는 시도 마태 복음 부시에서 차용 한) 입력 클래스의 조각이
private function OnEnterFrame(e:Event = null):void
{
if (Input.kd("W"))
{
this.y -= runSpeed;
SetAnimation(RUNUP);
}
else if (Input.kd("S"))
{
this.y += runSpeed;
SetAnimation(RUNDOWN);
}
else if (Input.kd("A"))
{
this.x -= runSpeed;
SetAnimation(RUNLEFT);
}
else if (Input.kd("D"))
{
this.x += runSpeed;
SetAnimation(RUNRIGHT);
}
else
SetAnimation(IDLE);
}
:
이
는 Player.as 클래스의 코드 조각입니다 이제Key Down: 68 //Holding D
Key Down: 65 //Let go of D and pressed A
Key Up: 68 //D KeyUp fires
Key Up: 65 //A KeyUp fires, but I only just pressed A and didn't let it go
, 더 명확한 설명을위한 시나리오 : 여기
그리고 출력입니다 : 캐릭터를 오른쪽으로 돌리려면 D를 누르고 있다고합시다.이 시점에서 모두 괜찮습니다. 나는 빨리 D를 놓아주고 A를 눌러 다른 방향으로 돌리면 문제가 발생합니다. handleKeyUp에서 추적하는 동안, 그것은 A와 A 모두가 동시에 A를 눌렀음에도 불구하고 동시에 풀려 났다고 말합니다. 결코 풀어지지 않았습니다. 이렇게하면 내 보류 된 키 사전에서 D와 A가 모두 사라지고 플레이어가 스플릿 순간에 멈추게되며 handleKeyDown이 시작되면 바로 올바른 방향으로 뛰기 시작합니다. 이것에 대해 내가 뭘 할 수 있니? 추가 설명이나 추가 코드가 필요한 경우 알려 주시기 바랍니다.
자신 만의 문제를 해결할 때 자신의 질문에 대한 해답을 설명하는 것이 좋습니다. – Marty
죄송합니다. 그런 식으로 답변 할 수있는 방법을 찾았지만 직접 질문에 답장을 보내지 못했습니다. –