2

今、キーボードイベントの繰り返しを止めようとしています。

私の考えは、キーが押されたときに 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);
}

これを行うと、キーボードイベントなしでキーループが何度も繰り返されます。「if (this.soundplayed==true)」に「&& keyDown...」を追加する必要があると思いますが、エラーを発生させずにそれを行う方法がわかりません

これは私が修正しようとしているキーボードプレーヤーですhttp://soulseekrecords.org/psysci/animation/piano.html

4

2 に答える 2

3

岸がすでに提案したことを書くもう1つの(おそらくもう少し一般的な)方法:

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 関数を呼び出します。

于 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イベント リスナーが 1 回実行されることに注意してください。つまり、少なくともifブランチでは、soundplayed 変数がロック メカニズムとして使用されるためです。keyupが実行された後にのみ再度実行されます( this.soundplayed = false )。

于 2010-04-30T21:33:40.370 に答える