同时按键导致不必要的行为

时间:2014-12-08 17:21:25

标签: actionscript-3 flash events

我正在制作一个带动作脚本3的射击游戏。我有一个英雄,当任何箭头键被按下时它会移动 我的代码如下

//some class level variables
private var vx :int = 0;
private var vy :int = 0;

//in the Main constructor
stage.addEventListener(KeyboardEvent.KEY_DOWN , moveHero);
stage.addEventListener(KeyboardEvent.KEY_UP , stopHero);
stage.addEventListener(Event.ENTER_FRAME , onEnter);

//and all the handlers
function moveHero(e:KeyboardEvent)
{
    if (e.keyCode == 37)
    {
        vx = -5;
    } 
    else if (e.keyCode == 38)
    {
        vy = -10;
    } 
    else if (e.keyCode == 39)
    {
        vx = 5;
    } 
    else if (e.keyCode == 40)
    {
        vy = 10;
    }
}
function stopHero(e:KeyboardEvent)
{
    //when key is up stop miving the hero
    vx = 0;
    vy = 0;
}
function onEnter(e:Event):void
{
    //updtae hero position 
    hero.x += vx;
    hero.y += vy;
}

现在我的问题是当用户手指上下键或左右键并突然按下它们然后英雄显示出对按键响应的明显滞后

1 个答案:

答案 0 :(得分:1)

您必须完全像评论中所说的 BotMaster 一样,以及在AS3代码中的样子:

var keys:Array = new Array(255);

stage.addEventListener(KeyboardEvent.KEY_DOWN , keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP , keyUp);
stage.addEventListener(Event.ENTER_FRAME , loop);

function keyDown(e:KeyboardEvent):void {
    keys[e.keyCode] = true;
}

function keyUp(e:KeyboardEvent):void {
    keys[e.keyCode] = false;
}

function loop(e:Event):void {
    if(keys[Keyboard.LEFT]) {
        trace("Moving left...");
    } else if(keys[Keyboard.RIGHT]) {
        trace("Moving right...");
    }
}