KeyIfクラス
- KeyIfはonKeyUp/Downのためのキーイベントハンドラを簡単に生成できるクラスです。
- 「EnterキーまたはSpaceキーを押したときだけ」といった条件を指定できます。
コード
サンプル
どんな風になるか
適用前
Key.addListener(this);
this.onKeyDown = function() {
switch(Key.getCode()) {
case Key.UP:
trace('UP/PGUP');
break;
case Key.PGUP:
trace('UP/PGUP');
break;
case Key.DOWN:
trace('DOWN/PGDN');
break;
case Key.PGDN:
trace('DOWN/PGDN');
break;
case Key.LEFT:
trace('LEFT#1');
trace('LEFT#2');
break;
case Key.RIGHT:
trace('RIGHT#1');
trace('RIGHT#2');
trace('RIGHT#3');
break;
case Key.SPACE:
trace('SPACE/CTRL');
break;
case Key.CONTROL:
trace('SPACE/CTRL');
break;
case Key.HOME:
trace('HOME');
break;
}
}
適用後
Key.addListener(this);
this.onKeyDown = KeyIf.f({
UP: {PGUP: function(){trace('UP/PGUP')}},
DOWN: {PGDN: function(){trace('DOWN/PGDN')}},
LEFT: [function(){trace('LEFT#1')}, function(){trace('LEFT#2')}],
RIGHT: [function(){trace('RIGHT#1')}, function(){trace('RIGHT#2')}, function(){trace('RIGHT#3')}]
SPACE: {CONTROL: function(){trace('SPACE/CTRL')}},
HOME: function(){trace('HOME')}
});
使い方
1.1つのキーに対して1つのメソッド
キー名: 関数の参照
Key.addListener(this);
this.onKeyDown = KeyIf.f({
LEFT: function(){trace('LEFT')},
RIGHT: function(){trace('RIGHT')}
});
2.1つのキーに対して複数のメソッド
キー名: [関数の参照1, 関数の参照2, ... 関数の参照N]
Key.addListener(this);
this.onKeyDown = KeyIf.f({
LEFT: [function(){trace('LEFT#1')}, function(){trace('LEFT#2')}],
RIGHT: [function(){trace('RIGHT#1')}, function(){trace('RIGHT#2')}, function(){trace('RIGHT#3')}]
});
3.複数のキーに対して1つのメソッド
キー名1: {キー名2: {キー名3: ... {キー名N: 関数の参照} ... }}
Key.addListener(this);
this.onKeyDown = KeyIf.f({
UP: {PGUP: function(){trace('UP/PGUP')}},
DOWN: {PGDN: function(){trace('DOWN/PGDN')}}
});
4.複数のキーに対して複数のメソッド
- 未実装
注意点
- 現状では特殊キー(Keyクラスにstaticで定義されているキー)のみの対応になります。
- そのうち全てのキーに対応します。
- barメソッド内でthisを使用している場合、「LEFT: foo.bar」と記述しても正しく実行されません。
- 手抜き実装だからです。すみません。apply/callを使ってthisを渡す必要があります。
- そのうちもっと簡単に記述できるようにします。
- その他、いろいろ問題がある(気がする)ので気をつけて使ってください。
