as3では、Keyboard
クラスを使うとキーコードを取得できるんだけど、キーの名前を取得したい。
String.fromCharCode()
を使えば取得できるんだけど、SHIFTキーとかはちゃんと表示してくれなかったり、完璧じゃない。
trace( String.fromCharCode(Keyboard.D)) //D
trace( String.fromCharCode(Keyboard.SHIFT))
ので、ちゃんと取得できるようにする。
describeType()
を使えばプロパティ名をStringとして取得できるので、それを利用してキーの名前を取得してみる。
import flash.utils.describeType;
import flash.utils.Dictionary;
function getKeyboardDict():Dictionary {
var keyDescription:XML = describeType(Keyboard);
var keyNames:XMLList = keyDescription..constant.@name;
var keyboardDict:Dictionary = new Dictionary();
var len:int = keyNames.length();
for(var i:int = 0; i < len; i++) {
keyboardDict[Keyboard[keyNames[i]]] = keyNames[i];
}
return keyboardDict;
}
var keyDict:Dictionary = getKeyboardDict();
trace(keyDict[Keyboard.UP]); //UP
trace(keyDict[Keyboard.SHIFT]); //SHIFT
String.fromCharCode()
で表示できなかったキーも表示できるようになった。