2

现在我正试图让键盘事件停止重复。

我的想法是当按键被按下时有一个真假条件,这样如果按键已经按下,它就不会重复。

//Mouse Event Over
keyCButton.addEventListener(MouseEvent.MOUSE_OVER, function(){gotoAndStop(2)});
//Variable
var Qkey:uint = 81;
//Key Down Event
stage.addEventListener(KeyboardEvent.KEY_DOWN, keydown);
var soundplayed = false;
function keydown(event:KeyboardEvent){
    if (event.keyCode==Qkey) {
        this.soundplayed=true;
    }
}

if (this.soundplayed==false){
    gotoAndPlay(3);
}

//Key Up Event
stage.addEventListener(KeyboardEvent.KEY_UP, keyup);

function keyup(event:KeyboardEvent){
    this.soundplayed=false;
    gotoAndStop(1);
}

这样做会使键循环一遍又一遍而没有键盘事件我想我需要在“if (this.soundplayed==true)”中添加一个“&& keyDown ...”但我不知道如何在没有错误的情况下做到这一点

这是我要修复的键盘手http://soulseekrecords.org/psysci/animation/piano.html

4

2 回答 2

3

写 Kishi 已经建议的另一种(也许更通用)的方式:

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

var downKeys:Dictionary = new Dictionary();

function keyDown(e:KeyboardEvent):void {
    if(!downKeys[e.keyCode]) {
        downKeys[e.keyCode] = true;
        processKeyDown(e);
    }
}

function keyUp(e:KeyboardEvent):void {
    delete downKeys[e.keyCode];
}

function processKeyDown(e:KeyboardEvent):void {
    trace(e.keyCode);
}

将调用 processKeyDown 函数,就好像禁用了 keydown 重复一样。如果您需要在按键启动时执行某些操作,请将该代码放入 keyUp 函数中,或者调用定义为 processKeyDown 的 processKeyUp 函数。

于 2010-05-01T01:26:55.963 回答
0

我不确定你在这些框架上做什么......这是完整的代码吗?

无论如何,你应该尝试这样的事情:

// Mouse Events
this.keyCButton.addEventListener(MouseEvent.MOUSE_OVER, function():void{ gotoAndStop(2) });

// Variables
var Qkey:uint = 81;
var soundplayed = false;

// Keyboard events
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keydown);
this.stage.addEventListener(KeyboardEvent.KEY_UP, keyup);

// Event listeners
function keydown(event:KeyboardEvent){
    if (event.keyCode == Qkey && !this.soundplayed) {
        this.soundplayed = true;
        this.gotoAndPlay(3);
    }
}

function keyup(event:KeyboardEvent){
    this.soundplayed = false;
    this.gotoAndStop(1);
}

请注意,keydown事件侦听器现在将执行一次——我的意思是……至少是if分支——因为 soundplayed 变量被用作锁定机制。它只会在执行keyup后再次执行(this.soundplayed = false)。

于 2010-04-30T21:33:40.370 回答