Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 按住AS3键以防止鼠标更新_Actionscript 3_Keyboard Events - Fatal编程技术网

Actionscript 3 按住AS3键以防止鼠标更新

Actionscript 3 按住AS3键以防止鼠标更新,actionscript-3,keyboard-events,Actionscript 3,Keyboard Events,我正在开发一个3D游戏,当我按下移动键时,我注意到一些奇怪的行为;游戏似乎暂时忽略鼠标位置,并停止更新玩家面对的方向。游戏并没有冻结——就像它不再注意鼠标的位置一样 以下是我用来获取按键和释放的代码: public function keyPressed(e:KeyboardEvent):void { switch (e.keyCode) { case 32: _keySpace = true;

我正在开发一个3D游戏,当我按下移动键时,我注意到一些奇怪的行为;游戏似乎暂时忽略鼠标位置,并停止更新玩家面对的方向。游戏并没有冻结——就像它不再注意鼠标的位置一样

以下是我用来获取按键和释放的代码:

public function keyPressed(e:KeyboardEvent):void {
    switch (e.keyCode) {
                case 32:
                        _keySpace = true;
                        break;
                case 81:
                        if (!keyQ) {
                            keyQ=true;
                        }
                        break;
                case 69:
                        if (!keyE) {
                            keyE=true;
                        }
                        break;
                case 65:
                        if (!keyA) {
                            keyA=true;
                        }
                        break;
                case 68:
                        if (!keyD) {
                            keyD=true;
                        }
                        break;

                case 87:
                        if (!keyW) {
                            keyW=true;
                        }
                        break;
                case 83:
                        if (!keyS) {
                            keyS=true;
                        }
                        break;
    }
}


public function keyLift(e:KeyboardEvent):void {
            if (e.keyCode==32) {
                _keySpace = false;
            } else if (e.keyCode==81) {
                keyQ=false;
            } else if (e.keyCode==69) {
                keyE=false;
            } else if (e.keyCode==65) {
                keyA=false;
            } else if (e.keyCode==68) {
                keyD=false;
            } else if (e.keyCode==87) {
                keyW=false;
            } else if (e.keyCode==83) {
                keyS=false;
            }
        }
更新鼠标位置的代码只是一个ENTER_FRAME事件:

addEventListener(Event.ENTER_FRAME, enterFrame);
…这将触发主游戏循环。下面是使用鼠标位置的相关部分。mouseX和mouseY属性在Player中用于左/右和上/下旋转视图

private function enterFrame(e:Event=null):void {
    _player.update(mouseX, mouseY);
}
所有这一切都很好——这只是按住扫射键的问题;这就好像,一旦按键开始重复,游戏就会花费所有的时间来解决这些事件,而忽略了更新旋转-即使它不依赖于MouseEvent

有人知道如何在按住按键时使Flash忽略重复按键吗?还是有其他问题?

干杯。

您可以检查上次触发密钥处理程序的时间,如果是最近超过某个阈值,请忽略它。你可以用十分之一秒:

private static const KEY_THRESHOLD:int = 100; // 100 ms = 1/10 second

private static var lastPressedAt:int;

public function keyPressed(e:KeyboardEvent):void {
    var now:int = new Date().getTime();

    if (lastPressedAt > 0 && now - lastPressedAt < KEY_THRESHOLD) {
        return;
    }

    lastPressedAt = now;

    // etc...
私有静态常量密钥\u阈值:int=100;//100毫秒=1/10秒
私有静态变量lastPressedAt:int;
按下公共功能键(e:键盘事件):无效{
var now:int=new Date().getTime();
如果(lastPressedAt>0&&now-lastPressedAt
我注意到的另一件事是,在Flash中测试时,它只存在上述问题;在html中运行时,它就可以了。因此,我将检查下面的micapam答案是否有效(如果有效,请勾选它)但我想,否则,这不是一个大问题——只是对测试阶段有点恼火。事实上,我注意到这种情况在html嵌入版本中发生。有人知道如何防止每次触发键盘事件吗?我不是说改变处理程序;我想防止按住键重复触发eve一开始是nt。其他人在他们的项目中注意到了吗?我不确定这是否可以,但我想我应该给这个问题一个“碰撞”。我仍然按住键以防止鼠标更新(并忽略鼠标单击)-但似乎只有当按键被按住足够长的时间以自动重复时才会发生这种情况。有没有办法防止按键在Flash中自动重复?如果可能的话,我真的很想防止不必要的事件触发。我按原样尝试了这种方法,但它不起作用(int不能为null);我也尝试了几种不同的方法(使用“undefined”或将lastPressedAt更改为一个数字(由getTime()返回的类型)),所有操作均未成功。还有其他提示吗?