Отключение повторяющегося события нажатия клавиатуры в as3 - PullRequest
2 голосов
/ 01 мая 2010

теперь я пытаюсь заставить события клавиатуры перестать повторяться.

Моя идея состояла в том, чтобы иметь условие истинности и ложности для нажатия клавиши, чтобы оно не повторялось, если клавиша уже нажата.

//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);
}

выполнение этого делает цикл клавиш снова и снова без события клавиатуры Я думаю, что мне нужно добавить «&& keyDown ...» в «if (this.soundplayed == true)», но я не знаю, как это сделать, не получая ошибок

вот клавиатурный плеер, который я пытаюсь исправить http://soulseekrecords.org/psysci/animation/piano.html

Ответы [ 2 ]

3 голосов
/ 01 мая 2010

Просто еще один (возможно, более общий) способ написать то, что Киши уже предложил:

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 будет вызываться так, как если бы повторение нажатия клавиши было отключено. Если вам нужно что-то сделать, когда клавиша поднята, поместите этот код в функцию keyUp или, возможно, вызовите функцию processKeyUp, определенную как processKeyDown.

0 голосов
/ 01 мая 2010

Я не уверен, что вы делаете на этих кадрах .. Это полный код?

В любом случае, вы должны попробовать что-то вроде этого:

// 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 теперь будет выполняться один раз - я имею в виду ... по крайней мере, ветвь , если - поскольку переменная со звуковым воспроизведением используется в качестве механизма блокировки. Он будет выполняться снова только после выполнения keyup ( this.soundplayed = false ).

...