【问题标题】:How to prevent stoping the move when pressing more than one key(ActionScript)如何防止按下多个键时停止移动(ActionScript)
【发布时间】:2012-07-07 02:26:59
【问题描述】:

我有 2 个事件监听器:

1) 按键监听器(A, S, D ,W); - 用于移动对象

2) key listener(WhiteSpace) - 用于跳转对象

所以当我按下 A OR S OR D OR W 键时,我按下空格键,在此之前一切正常,对象同时移动和跳跃,但如果我在移动时释放空格键,物体停止...

那么当我释放键空白时,我怎样才能做到这一点,对象仍然会移动?不注意其他键的释放或按下?

private function onKeyDown(e:KeyboardEvent):void {

    //trace(e.keyCode);
    switch(e.keyCode)
    {

    case 68:
    direction = 'left';
    stage.addEventListener(Event.ENTER_FRAME, moveRight);
    break;
    case 65:
    direction = 'right';
    stage.addEventListener(Event.ENTER_FRAME, moveLeft);
    break;
    case 32:
    jump() // the whitespace key
        break;

    }

private function moveRight(e:Event):void {

shape.x += 5;

}

private function moveLeft(e:Event):void {

shape.x += 5;

}

private function jump():void {

    stage.addEventListener(Event.ENTER_FRAME, jumpAnimation);
}

private function jumpAnimation(e:Event):void {

   //here code for jumping increasing the y and decreasing....
}

private function onKeyUp(e:Event):void {


    stage.removeEventListener(Event.ENTER_FRAME, moveRight);
    stage.removeEventListener(Event.ENTER_FRAME, moveLeft);


}

【问题讨论】:

  • 向我们展示您正在使用什么,如果我们没有它,我们将无法调试您的代码。另外,请提供相关的 sn-ps。
  • 你能添加你的代码吗?在没有实际看到的情况下猜测它很困难,但这似乎是一个标志重置问题。
  • 添加了代码.....,还有很多其他的代码,但我认为这是最相关的
  • 所以问题是形状对象在释放某个键时停止,我不明白为什么会发生这种情况?如何解决这个问题
  • 它不仅是空格,当我释放任何键时,另一个键取消到 ,这是为什么呢??

标签: flash actionscript


【解决方案1】:

您可以实现一个按键向上/向下监听器和一个输入帧监听器,并使用一些布尔值来指示哪些按键被按下并相应地更新。这样的事情可能会奏效:

var keyMap:Dictionary = new Dictionary();

addEventListener( KeyboardEvent.KEY_DOWN, onKeyDown );
addEventListener( KeyboardEvent.KEY_UP, onKeyUp );
addEventListener( Event.ENTER_FRAME, onEnterFrame );

function onKeyDown( event:KeyboardEvent ):void 
{
    keyMap[ event.keyCode ] = true;
}

function onKeyUp( event:KeyboardEvent ):void 
{
    keyMap[ event.keyCode ] = false;
}

function onEnterFrame( event:EnterFrame ):void 
{
    if( keyMap[ 68 ] ) 
    {
        // -- move left
    }

    if( keyMap[ 65 ] ) 
    {
        // -- move right 
    }

    // -- ect...
}

这将避免一个键向上导致所有其他键连续触发的情况,因为您只依赖于每个键向上或向下的单个键。更新场景的代码将持续运行。

【讨论】:

  • 在我做了这个之后,现在我不能一次按 2 个键,只能按一个键,其他键同时没有反应 :(,如果我按右和然后按向左,它会向左忽略右键,但是当我按右键然后按向左时,它仍然在右侧移动,忽略左键o_O,xmmm
  • 还有什么更好地使用 switch 或 if 语句???,因为如果我需要设置 2 个元素 keyMap[jump] 和 keyMap[left or right],则 switch case 将执行只有1个?所以 if 语句 if 更好
  • 两者都不是真的更好。这是一个偏好和方便的问题。
  • 好吧,我已经使用了 IF 语句并且它的工作都很好)))感谢您的帮助))):)
猜你喜欢
  • 1970-01-01
  • 2012-07-17
  • 2014-04-26
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
相关资源
最近更新 更多