Событие клавиатуры в as3 выполняется неоднократно - PullRequest
0 голосов
/ 04 июля 2018

Я новичок в языке AS3. Я хотел бы спросить, используется ли KeyboardEvent в as3 до тех пор, пока нажата клавиша? Это создает мне проблемы при выполнении двойного прыжка для моего персонажа. Вот часть моего кода:

var dbJump:Boolean=true;
var onGround:Boolean=false;
var Yvel:Number=0;
var keyUp:Boolean=false;
this.addEventListener(Event.ENTER_FRAME,Eframe);
stage.addEventListener(KeyboardEvent.KEY_DOWN, 
kDown) 
stage.addEventListener(KeyboardEvent.KEY_UP, 
kUp) 
function kDown(e:KeyboardEvent):void{
    var key:uint=e.keyCode;
    if(key==32){
       keyUp=true;
    }
}
function kUp(e:KeyboardEvent):void{
    var key:uint=e.keyCode;
    if(key==32){
        keyUp=false;
    }
}
function Eframe(e:Event):void{
    Yvel++;
    myChar.y+=Yvel;
    while(ground.hitTestPoint(myChar.x,myChar.y,true)){
        myChar.y--;
        Yvel=0;
    }
    if(ground.hitTestPoint(myChar.x,myChar.y+3,true)){
        onGround=true;
        //if touching ground then return the dbJump to true;
        dbJump=true;
    else{
        onGround=false;
        if(!keyUp){
            //if not on ground an not pressed space, dbJump 
            // still true
            dbJump=true;
        }
    }
    if(keyUp && dbJump && onGround){
        Yvel=-12;
    }
    // if space pressed and not on the ground
    else if(keyUp && dbJump && !onGround){
        Yvel=-12;
        //then say doublejump is completed
        dbJump=false;
        trace(dbJump);
    }
}

, поэтому переменная dbJump сразу становится ложной при первом нажатии клавиши пробела, а не во втором нажатом промежутке времени. Я поставил трассировку, чтобы увидеть, сколько повторяется событие нажатия клавиши. Так что суть в том, что dbJump сразу стал ложным, как только мой персонаж оторвался от земли. я еще не отпустил ключ. Я попытался быстро нажать и отпустить клавишу пробела, и она работает (поэтому я действительно уверен, что это потому, что повторяющееся утверждение «dbJump = false»). Как это исправить? Кроме того, я имею в виду, что если свойство dbJump имеет значение false, это означает, что нельзя снова прыгнуть / двойной прыжок завершен.

...