【问题标题】:How many pressed keys Flash can detect? using as3Flash 可以检测到多少个按键?使用 as3
【发布时间】:2010-12-21 22:13:58
【问题描述】:

我正在开发一个小游戏。我使用下面的代码来检测玩家按下的按键:

private function onKeyDown(event:KeyboardEvent):void {
        //moviment keys
        if (event.keyCode == 37 || event.keyCode == 65) {
            this.leftKeyPressed = true;
        }
        if (event.keyCode == 39 || event.keyCode == 68) {
            this.rightKeyPressed = true;
        }
        if (event.keyCode == 38 || event.keyCode == 87) {
            this.upKeyPressed = true;
        }
        if (event.keyCode == 40 || event.keyCode == 83) {
            this.downKeyPressed = true;
        }

        if (event.keyCode == this.shootKey) {
            this.shootKeyPressed = true;
        }
    }

onKeyUp 事件:

private function onKeyUp(event:KeyboardEvent):void {
        if (event.keyCode == 37 || event.keyCode == 65) {
            this.leftKeyPressed = false;
        }
        if (event.keyCode == 39 || event.keyCode == 68) {
            this.rightKeyPressed = false;
        }
        if (event.keyCode == 38 || event.keyCode == 87) {
            this.upKeyPressed = false;
        }
        if (event.keyCode == 40 || event.keyCode == 83) {
            this.downKeyPressed = false;
        }
        if (event.keyCode == this.shootKey) {
            this.shootKeyPressed = false;
        }
        if (event.keyCode == changeColorKey) {
            trace('color key released');
            trace(getTimer());
            this.changeColorKeyPressed = true;
        }

    }

基本上,玩家几乎一直按住shootKey。并且 changeColorKey 将被经常按下但不会按住。在测试时,我注意到按住shootKey 和向下的右箭头,changeColorKey 的 onKeyUp 事件不会被触发。按住向上或向下箭头键而不是向右箭头具有相同的效果。如果我按住左箭头键,事件就会被触发。为什么会发生?我的代码有问题吗?

【问题讨论】:

    标签: flash actionscript-3 events keyboard


    【解决方案1】:

    您看到的问题与您的代码无关,而是与您的键盘有关。根据键盘技术,您可以同时按下的键的数量和组合会有所不同。几年前我做了一个与你的代码非常相似的代码,我记得你提到过同样的问题,而我现在的键盘不再发生(似乎这可以支持最多五个同时字母,而旧的支持三个) .

    【讨论】:

    【解决方案2】:

    我相信问题也与硬件键盘有关。我自己在键盘上测试过代码,在非 USB 键盘上我不能同时按 3 个以上的键。

    现在在您的示例中,这应该不是问题,因为您永远不需要按 3 个以上的键。但要小心!硬件键盘似乎还有另一个限制,它与您按下的键的距离有关。

    例如,在尝试您的代码时,当我有另外两个键 KEYed_DOWN(意思是不断按下)旁边我是 KEYing_UP(所以我想接收 key_up 的那个)时,我似乎无法收到 KEY_UP事件)。所以我相信这就是为什么你的代码只能使用左箭头键。您的向上、向下和向右箭头键可能不知何故太接近 changeColorKey 了,因此(我猜是因为键盘中的电路是如何完成的)它无法触发它的向上状态。

    尝试将 shootKey 和/或 changeColorKey 移到更远的其他地方,看看是否可行。

    【讨论】:

      【解决方案3】:

      我推荐使用 Keypoll 库,你可以在这里找到它:http://code.google.com/p/bigroom/wiki/KeyPoll

      至于你可以按住多少个键,我不确定,但是尝试使用 ctrl,shift 因为通常不计入限制(我没有在 Flash/ActionScript 中测试过)。

      【讨论】:

      • 我尝试了 KeyPoll 类,它显示了与按键相同的问题。
      • 好的,那是 Flash 的限制。您是否尝试使用 ctrl 和 shift 来实现某些功能?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2011-06-24
      • 2011-04-11
      • 2014-09-09
      相关资源
      最近更新 更多