2010-04-30 6 views
2

이제 반복을 중지하기 위해 키보드 이벤트를 작성하려고합니다.as3에서 반복되는 키보드 작동 중지 이벤트 사용 안 함

내 생각은 키를 눌렀을 때 true 및 false 조건을 사용하여 키가 이미 내려져 있으면 반복하지 않게하는 것이 었습니다.

//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 == true)가"하지만 난없이 반복 키 루프를하게하고 점점 오류 여기

없이 작업을 수행하는 방법을 잘 모릅니다 키보드 플레이어는 난 .. 난 당신이 이러한 프레임에 무엇을하는지 확실하지 않다 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

고맙습니다. –

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

아직 시도하지는 않았지만 고맙습니다. –