第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;
}
}

*1:インスタンスにフォーカスを当てるには,Stage.focusプロパティにその対象となるインスタンスを代入する。 」とのこと。