第13回 キーボードによる操作
第13回←教材はこれ!
- キーボード操作ってことは急にゲーム作りっぽくなるのかな?
- キーを押すイベント→InteractiveObject.keyDown(KeyboardEvent.KEY_DOWN 定数)
- 継承関係は、InteractiveObjectクラス>DisplayObjectクラス>MovieClipクラス。
- InteractiveObject.keyDownのリスナーはStageオブジェクトをターゲットとして登録しなければならない。(DisplayObjectクラス>Stageクラス)
- ここでなぜ操作したいMovieClipインスタンスをターゲットにせずStageをターゲットにしてるのかと、言われなければ気づかない話。
MovieClipインスタンスに対してキーイベント(InteractiveObject.keyDownなど)のリスナーを登録すると,そのインスタンスにフォーカスを当てていないと*1,イベントが受取れないのだ。またフォーカスを当てても,インスタンス外のステージ上をマウスクリックでもすれば,フォーカスが外れてイベントを受取らなくなってしまう。
- そんなわけでフォーカスに関係なくInteractiveObject.keyDownを処理するためにキー操作するMovieClipシンボルに記述するのは以下。
// MovieClip: キー操作で動かすインスタンス
stage.addEventListener(KeyboardEvent.KEY_DOWN, xKeyDown);
function xKeyDown(eventObject:KeyboardEvent):void {
trace(eventObject);
}
- リスナー関数xKeyDown()は、trace()で引数として受取ったイベントオブジェクトeventObjectを出力している。
- 矢印キーの下を押した時の出力結果が以下。左辺がプロパティ。
[
KeyboardEvent type="keyDown" ←発生したイベント名(文字列)
bubbles=true
cancelable=false
eventPhase=2
charCode=0 ←イベントが発生したキー入力のAsccii文字コード(整数)
keyCode=37 ←イベントが発生したキーのキーコード(整数)←37は下矢印のキーコード
keyLocation=0
ctrlKey=false ←Ctrlキーが押されているとtrue、押されていなかったらfalse
altKey=false ←Alt・optionキーが押されているとtrue、押されていなかったらfalse
shiftKey=false ←Shiftキーが押されているとtrue、押されていなかったらfalse
]
- 文字以外のキーにはKeyboadクラスの定数が決められている。
- Keyboard.DOWN
- 下矢印キー:40
- Keyboard.LEFT
- 左矢印キー:37
- Keyboard.RIGHT
- 右矢印キー:39
- Keyboard.UP
- 上矢印キー:38
- この定数を使ってのスクリプトが以下。
// MovieClip: キー操作で動かすインスタンス
stage.addEventListener(KeyboardEvent.KEY_DOWN, xKeyDown);
function xKeyDown(eventObject:KeyboardEvent):void {
var nKeyCode:int = eventObject.keyCode;
xMove(nKeyCode);
}
function xMove(nKeyCode:int):void {
if (nKeyCode == Keyboard.LEFT) {
x -= 1;
} else if (nKeyCode == Keyboard.RIGHT) {
x += 1;
} else if (nKeyCode == Keyboard.UP) {
y -= 1;
} else if (nKeyCode == Keyboard.DOWN) {
y += 1;
}
}