2011-07-11 11 views
1

イベントがトリガされたときにパラメータを渡したいと思います。私の機能:AS3イベントとパッシングパラメータ

private function keyChange(e:KeyboardEvent, setValue:Boolean):void 

私はキーが上下に設定するために同じ機能を使うことができます。どのようにイベントリスナーを書くのですか?私は試しました:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyChange(,true)); 

しかし、それは動作しませんでした。これは可能ですか?おかげでそのよう

答えて

1

:あなたはパラメータを渡したい場合は

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyChangeHandler); 
stage.addEventListener(KeyboardEvent.KEY_UP, keyChangeHandler); 

... 

private function keyChangeHandler(e:KeyBoardEvent):void 
{ 
    var keyDown:Boolean = e.type == KeyBoardEvent.KEY_DOWN; 

    ... 
    // Do stuff 
} 

はしかし、あなたは、カスタムイベントを使用する必要があります。

public class KeyBoardActionEvent extends KeyBoardEvent 
{ 
    public var shouldSetValue:Boolean; 
    public function KeyBoardActionEvent(setValue:Boolean, type:String, bubbles:Boolean = false, cancelable:Boolean = false):void 
    { 
     shouldSetValue = setValue; 
     super(type, bubbles, cancleable); 
    } 
} 
1

簡単な方法は、あなたのイベントハンドラ内でイベントを調べることです。

stage.addEventListener(KeyboardEvent.KEY_UP, keyChange); 
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyChange); 

private function keyChange(e:KeyboardEvent) { 
    if (e.type == KeyboardEvent.KEY_DOWN) { 
     // ... handle key down, etc... 
    } 
} 

また、あなたがしたいパラメータを渡すaddEventListenerインライン関数を渡すことでそれを行うか、あるいは閉鎖とトリッキーな何かをするが、それはあなたに上記の方法を超える何かを得ないだろうでした。

+0

+1これを処理する優れた方法 – Joe

+0

これはOPの質問には対処しません。 – Cameron

0

これは、

stage.addEventListener(KeyboardEvent.KEY_DOWN,function(e:MouseEvent):void{keyChange(e,true)}); 
1

完全に可能あなたの解決策を見つけるための最も簡単な方法です。簡単で簡単:

private function keyChange(setValue:Boolean):Function { 
    return function(e:KeyboardEvent):void { 
    // Now you have both "e" and "setValue" here 
    } 
} 
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyChange(true)); 

後でリスナーを削除したい場合はどうすればいいですか?あなたが面白い。この解決策を見つけた場合は、this answerを参照してください

var functionKeyChange:Function = keyChange(true); 
stage.addEventListener(KeyboardEvent.KEY_DOWN, functionKeyChange); 
stage.removeEventListener(KeyboardEvent.KEY_DOWN, functionKeyChange); 

:ちょうどkeyChange()アウトを取ります。

関連する問題