2010-04-30 32 views
2

现在我试图让键盘事件停止重复。禁用as3中的重复键盘按下事件

我的想法是有一个真实和错误的条件,当按键被按下时,如果键已经关闭,它不会重复。

//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 ......”到“如果(this.soundplayed ==真)”,但我不知道如何做到这一点没有得到错误

这里是键盘手我试图修复http://soulseekrecords.org/psysci/animation/piano.html

回答

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事件监听器现在将执行一次 - 我的意思..至少如果分支 - 作为soundplayed变量被用作锁定机制。 只有在执行键盘后才会再次执行(this.soundplayed = false)。

+0

这工作,非常感谢你 – 2010-05-03 14:01:45

3

只是另一个(或许有点更通用)的方式来写什么岸已经建议:仿佛KEYDOWN重复被禁用

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函数中,或者调用processKeyDown之类的processKeyUp函数。

+0

我还没有尝试过,但也谢谢你 – 2010-05-03 14:02:04