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を渡す必要があります。
    • そのうちもっと簡単に記述できるようにします。
  • その他、いろいろ問題がある(気がする)ので気をつけて使ってください。