Flashゲームプログラミング講座 for ActionScript3.0

 

キーボードが押されたか調べる



サンプルをダウンロード




■キーボードが押されたか調べる


キーボードが押されたか調べるには、KeyboardEvent.KEY_DOWN イベントを使用します。
 
登録した関数の引数から KeyboardEvent オブジェクトが得られます。
 
キーを押しっぱなし時の入力検出タイミングは、タイピング風となります。
 
キーボードが押されたか調べる

import flash.events.KeyboardEvent;

// キーボードを押したときに実行される関数
function KeyDownFunc(e:KeyboardEvent):void{

	trace("キーボードが押された");

};

// イベントを登録
stage.addEventListener(KeyboardEvent.KEY_DOWN , KeyDownFunc);
 
■KeyboardEvent オブジェクトについて
 
KeyboardEvent オブジェクトには、以下のプロパティがあります。 (一部省略)
 
プロパティ 解説
keyCode uint キーコード
keyLocation uint Shiftキーなど 左側=1 か 右側=2 か
ctrlKey Boolean Ctrlキーの押下状態
shiftKey Boolean Shiftキーの押下状態
altKey Boolean Altキーの押下状態(未サポート)
 
押されたキーのキーコードを調べる

import flash.events.KeyboardEvent;

// キーボードを押したときに実行される関数
function KeyDownFunc(e:KeyboardEvent):void{

	// キーコード
	var key_code:uint = e.keyCode;
	trace("code:" + key_code);

	// Shiftキーなど 左側=1 か 右側=2 か
	var key_location:uint = e.keyLocation;
	trace("location:" + key_location);

	// Ctrlキーの押下状態
	var ctrl_key:Boolean = e.ctrlKey;
	trace("ctrl:" + ctrl_key);

	// Shiftキーの押下状態
	var shift_key:Boolean = e.shiftKey;
	trace("shift:" + shift_key);

	// Altキーの押下状態
	var alt_key:Boolean = e.altKey;
	trace("alt:" + alt_key);

};

// イベントを登録
stage.addEventListener(KeyboardEvent.KEY_DOWN , KeyDownFunc);
 
■stage 以外のインスタンスに登録した場合
 
stage オブジェクト以外のインスタンスに登録した場合、フォーカスが無いとイベントが動作しません
 
フォーカスを与えるには、stage.focus プロパティを使用します。
 
stage.focus に、フォーカスを与えたいインスタンスをセットします。
 
stage オブジェクト以外でのイベントの登録

import flash.display.MovieClip;
import flash.events.KeyboardEvent;

// ムービークリップを作成する
var mc : MovieClip = new MovieClip();

// ステージにムービークリップを配置する
stage.addChild(mc);

// ムービークリップにフォーカスを与える
stage.focus = mc;

// ムービークリップにイベントを登録
mc.addEventListener(KeyboardEvent.KEY_DOWN , function (e:KeyboardEvent):void{
	trace(e.keyCode);
});
 
 

 

キーボードが離されたか調べる



サンプルをダウンロード
 

■キーボードが離されたか調べる


キーボードが離されたか調べるには、KeyboardEvent.KEY_UP イベントを使用します。
 
登録した関数の引数から KeyboardEvent オブジェクトが得られます。
 
キーボードが離されたか調べる

import flash.events.KeyboardEvent;

// キーボードを離したときに実行される関数
function KeyUpFunc(e:KeyboardEvent):void{

	trace("キーボードが離された");

};

// イベントを登録
stage.addEventListener(KeyboardEvent.KEY_UP , KeyUpFunc);
 
■KeyboardEvent オブジェクトについて
 
KeyboardEvent オブジェクトには、以下のプロパティがあります。 (一部省略)
 
プロパティ 解説
keyCode uint キーコード
keyLocation uint Shiftキーなど 左側=1 か 右側=2 か
ctrlKey Boolean Ctrlキーの押下状態
shiftKey Boolean Shiftキーの押下状態
altKey Boolean Altキーの押下状態(未サポート)
 
離されたキーのキーコードを調べる

import flash.events.KeyboardEvent;

// キーボードを離したときに実行される関数
function KeyUpFunc(e:KeyboardEvent):void{

	// キーコード
	var key_code:uint = e.keyCode;
	trace("code:" + key_code);

	// Shiftキーなど 左側=1 か 右側=2 か
	var key_location:uint = e.keyLocation;
	trace("location:" + key_location);

	// Ctrlキーの押下状態
	var ctrl_key:Boolean = e.ctrlKey;
	trace("ctrl:" + ctrl_key);

	// Shiftキーの押下状態
	var shift_key:Boolean = e.shiftKey;
	trace("shift:" + shift_key);

	// Altキーの押下状態
	var alt_key:Boolean = e.altKey;
	trace("alt:" + alt_key);

};

// イベントを登録
stage.addEventListener(KeyboardEvent.KEY_UP , KeyUpFunc);
 
■stage 以外のインスタンスに登録した場合
 
stage オブジェクト以外のインスタンスに登録した場合、フォーカスが無いとイベントが動作しません
 
フォーカスを与えるには、stage.focus プロパティを使用します。
 
stage.focus に、フォーカスを与えたいインスタンスをセットします。
 
stage オブジェクト以外でのイベントの登録

import flash.display.MovieClip;
import flash.events.KeyboardEvent;

// ムービークリップを作成する
var mc : MovieClip = new MovieClip();

// ステージにムービークリップを配置する
stage.addChild(mc);

// ムービークリップにフォーカスを与える
stage.focus = mc;

// ムービークリップにイベントを登録
mc.addEventListener(KeyboardEvent.KEY_UP , function (e:KeyboardEvent):void{
	trace(e.keyCode);
});
 


 

キーボードが押しっぱなしか調べる

 

サンプルをダウンロード
 

■キーボードが押しっぱなしか調べる


1.配列を用意する
 
配列を1つ用意します。
 
この配列に、キーボードの入力状態を記録していきます。
 
配列を用意する

// キーボードの入力状態を記録する配列
var input_key_buffer:Array = new Array();
 
2.キーボードの入力状態を、イベントリスナーで監視する
 
キーボードが押されたか調べるには、KeyboardEvent.KEY_DOWN イベントを使用します。
 
キーボードが離されたか調べるには、KeyboardEvent.KEY_UP イベントを使用します。
 
2つのイベントを使って、キーボードの入力状態を監視します。
 
キーボードの入力状態を監視する

import flash.events.KeyboardEvent;

// キーボードを押したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_DOWN , function (e:KeyboardEvent) :void{
	trace("キーボードが押された");
});

// キーボードを離したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_UP , function (e:KeyboardEvent) :void{
	trace("キーボードが離された");
});
 
3.入力されたキー情報を配列に記録する
 
登録したコールバック関数の引数から、KeyboardEvent オブジェクトが得られます。
 
KeyboardEvent クラスの keyCode プロパティから、入力されたキーのキーコードが取得できます。
 
keyCode プロパティの値を使って、配列の番地にアクセスします。
 
「キーが押されたら true」、「キーが離されたら false」に変更します。
 
入力されたキー情報を配列に記録する

import flash.events.KeyboardEvent;

// キーボードの入力状態を記録する配列
var input_key_buffer:Array = new Array();

// キーボードを押したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_DOWN , function (e:KeyboardEvent) :void{
	input_key_buffer[e.keyCode] = true;
});

// キーボードを離したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_UP , function (e:KeyboardEvent) :void{
	input_key_buffer[e.keyCode] = false;
});
 
4.Flash が非アクティブか調べる
 
キーボードを押しながら、Flash を非アクティブにすると、押しっぱなしと判定されてしまいます。
 
Flash が非アクティブになったときは、配列に記録した入力情報をクリアします。
 
Flash が非アクティブになる瞬間を調べるには、Event.DEACTIVATE イベントを使用します。
 
ウィンドウが非アクティブになる瞬間を調べる

import flash.events.KeyboardEvent;
import flash.events.Event;

// キーボードの入力状態を記録する配列
var input_key_buffer:Array = new Array();

// キーボードを押したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_DOWN , function (e:KeyboardEvent) :void{
	input_key_buffer[e.keyCode] = true;
});

// キーボードを離したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_UP , function (e:KeyboardEvent) :void{
	input_key_buffer[e.keyCode] = false;
});

// Flash が非アクティブ時に呼び出されるイベント
stage.addEventListener(Event.DEACTIVATE , function (e:Event) :void{
	// 配列をクリアする
	input_key_buffer = new Array();
});
 
5.キーボードの入力状態を調べる
 
最後に、調べたいキーコード番号を使って、配列の番地にアクセスします。
 
キーボードが押されているか調べる

// キーボードが押されているか調べる関数
function KeyIsDown(key_code:uint) :Boolean{

	if(input_key_buffer[key_code])	return true;

	return false;

}
 
結果が真であれば、キーボードが押されています。
 
結果が偽であれば、キーボードが離されています。
 
毎フレーム特定のキーが押されているか調べる

import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
import flash.events.Event;

// ------------------------------------------------------------
// キーボードの入力を監視する処理
// ------------------------------------------------------------
// キーボードの入力状態を記録する配列
var input_key_buffer:Array = new Array();

// キーボードを押したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_DOWN , function (e:KeyboardEvent) :void{
	input_key_buffer[e.keyCode] = true;
});

// キーボードを離したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_UP , function (e:KeyboardEvent) :void{
	input_key_buffer[e.keyCode] = false;
});

// Flash が非アクティブ時に呼び出されるイベント
stage.addEventListener(Event.DEACTIVATE , function (e:Event) :void{
	// 配列をクリアする
	input_key_buffer = new Array();
});

// キーボードが押されているか調べる関数
function KeyIsDown(key_code:uint) :Boolean{
	if(input_key_buffer[key_code])	return true;
	return false;

}


// ------------------------------------------------------------
// 毎フレーム実行する
// ------------------------------------------------------------
stage.addEventListener(Event.ENTER_FRAME , function (e:Event) :void{

	// Aキーが押されているか調べる
	if(KeyIsDown(65)){
		trace("Aキーが押されている");
	}else{
		trace("Aキーが離されている");
	}

	// スペースキーが押されているか調べる
	if(KeyIsDown(Keyboard.SPACE)){
		trace("スペースキーが押されている");
	}else{
		trace("スペースキーが離されている");
	}

});
 
スプライトを、キーボードで移動する例です。
 
上下左右キーを押すと、スプライトを移動できます。
 
スプライトを上下左右キーで移動する

import flash.display.Sprite;
import flash.display.Graphics;
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
import flash.events.Event;

// ------------------------------------------------------------
// キーボードの入力を監視する処理
// ------------------------------------------------------------
// キーボードの入力状態を記録する配列
var input_key_buffer:Array = new Array();

// キーボードを押したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_DOWN , function (e:KeyboardEvent) :void{
	input_key_buffer[e.keyCode] = true;
});

// キーボードを離したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_UP , function (e:KeyboardEvent) :void{
	input_key_buffer[e.keyCode] = false;
});

// Flash が非アクティブ時に呼び出されるイベント
stage.addEventListener(Event.DEACTIVATE , function (e:Event) :void{
	// 配列をクリアする
	input_key_buffer = new Array();
});

// キーボードが押されているか調べる関数
function KeyIsDown(key_code:uint) :Boolean{
	if(input_key_buffer[key_code])	return true;
	return false;

}


// ------------------------------------------------------------
// 初期化
// ------------------------------------------------------------
// スプライトを作成する
var sprite:Sprite = new Sprite();

// ステージにスプライトを登録する
stage.addChild(sprite);

// 矩形をレンダリングする
var g:Graphics = sprite.graphics;
g.lineStyle (5, 0xAA0000, 1.0);
g.beginFill (0xFF4444, 1.0);
g.drawRect (0,0,100,100);


// ------------------------------------------------------------
// 毎フレーム実行する
// ------------------------------------------------------------
stage.addEventListener(Event.ENTER_FRAME , function (e:Event) :void{

	// 上キーが押された
	if(KeyIsDown(Keyboard.UP))	sprite.y -= 10;

	// 下キーが押された
	if(KeyIsDown(Keyboard.DOWN))	sprite.y += 10;

	// 左キーが押された
	if(KeyIsDown(Keyboard.LEFT))	sprite.x -= 10;

	// 右キーが押された
	if(KeyIsDown(Keyboard.RIGHT))	sprite.x += 10;

});
 


 

キーコードの一覧表

 

サンプルをダウンロード




■キーコードの一覧表


KeyboardEvent オブジェクトの keyCode プロパティから得られる、キーコードの一覧表です。
 
キーボードを押されたときにキーコードを取得する

import flash.events.KeyboardEvent;

// キーボードを押したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_DOWN , function (e:KeyboardEvent):void{
	// キーコードを出力
	trace(e.keyCode);
});
 
■英数字キー

A~Z、0~9までのキーコードの一覧表です。
 
キー keyCode
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
A 65
B 66
C 67
D 68
E 69
F 70
G 71
H 72
I 73
J 74
K 75
L 76
M 77
N 78
O 79
P 80
Q 81
R 82
S 83
T 84
U 85
V 86
W 87
X 88
Y 89
Z 90


 
■テンキー

テンキーのキーコードの一覧表です。
 
キー keyCode
0 96
1 97
2 98
3 99
4 100
5 101
6 102
7 103
8 104
9 105
* 106
+ 107
Enter 108
- 109
. 110
/ 111
 
■ファンクションキー

ファンクションキーのキーコードの一覧表です。
 
キー keyCode
F1 112
F2 113
F3 114
F4 115
F5 116
F6 117
F7 118
F8 119
F9 120
F10 121
F11 122
F12 123
F13 124
F14 125
F15 126
 
■その他のキー

その他のキーコードの一覧表です。
 
キー keyCode
BackSpace 8
Tab 9
Clear 12
Enter 13
Command 15
Shift 16
Ctrl 17
Alt 18
CapsLock 20
Esc 27
スペースバー 32
PageUp 33
PageDown 34
End 35
Home 36
← (左矢印) 37
↑ (上矢印) 38
→ (右矢印) 39
↓ (下矢印) 40
Insert 45
Delete 46
Help 47
NumLock 144
: * 186
; + 187
, < 188
- = 189
. > 190
/ ? 191
@ ` 192
[ { 219
\ | 220
] } 221
^ ~ 222
 
■キーコードの定数

キーコードの定数一覧表です。
 
キー プロパティ
BackSpace Keyboard.BACKSPACE
CapsLock Keyboard.CAPS_LOCK
Control Keyboard.CONTROL
Delete Keyboard.DELETE
End Keyboard.END
Enter Keyboard.ENTER
Escape Keyboard.ESCAPE
F1 Keyboard.F1
F2 Keyboard.F2
F3 Keyboard.F3
F4 Keyboard.F4
F5 Keyboard.F5
F6 Keyboard.F6
F7 Keyboard.F7
F8 Keyboard.F8
F9 Keyboard.F9
F10 Keyboard.F10
F11 Keyboard.F11
F12 Keyboard.F12
F13 Keyboard.F13
F14 Keyboard.F14
F15 Keyboard.F15
Home Keyboard.HOME
Insert Keyboard.INSERT
NUMPAD 0 Keyboard.NUMPAD_0
NUMPAD 1 Keyboard.NUMPAD_1
NUMPAD 2 Keyboard.NUMPAD_2
NUMPAD 3 Keyboard.NUMPAD_3
NUMPAD 4 Keyboard.NUMPAD_4
NUMPAD 5 Keyboard.NUMPAD_5
NUMPAD 6 Keyboard.NUMPAD_6
NUMPAD 7 Keyboard.NUMPAD_7
NUMPAD 8 Keyboard.NUMPAD_8
NUMPAD 9 Keyboard.NUMPAD_9
NUMPAD + Keyboard.NUMPAD_ADD
NUMPAD . Keyboard.NUMPAD_DECIMAL
NUMPAD / Keyboard.NUMPAD_DIVIDE
NUMPAD Enter Keyboard.NUMPAD_ENTER
NUMPAD * Keyboard.NUMPAD_MULTIPLY
NUMPAD - Keyboard.NUMPAD_SUBTRACT
Page Up Keyboard.PAGE_UP
Page Down Keyboard.PAGE_DOWN
Arrow Up Keyboard.UP
Arrow Down Keyboard.DOWN
Arrow Left Keyboard.LEFT
Arrow Right Keyboard.RIGHT
Shift Keyboard.SHIFT
Space Keyboard.SPACE
Tab Keyboard.TAB
 
使用例です。
 
スペースキーが押されたか調べる

import flash.ui.Keyboard;
import flash.events.KeyboardEvent;

// キーボードを押したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_DOWN , function (e:KeyboardEvent):void{

    if(e.keyCode == Keyboard.SPACE){
    	trace("スペースキーが押された");
    }

});
 
Aキーが離されたか調べる

import flash.events.KeyboardEvent;

// キーボードを離したときに実行されるイベント
stage.addEventListener(KeyboardEvent.KEY_UP , function (e:KeyboardEvent):void{

    if(e.keyCode == 65){
    	trace("Aキーが離された");
    }

});
 

 

■Adobe AIR 用キーコードの一覧表


Adobe AIR 専用のキーコードの定数一覧表です。
 
キー プロパティ
Command (Macintosh) Keyboard.COMMAND
Alt Keyboard.ALTERNATE
NumPad Keyboard.NUMPAD
テンキー 0 Keyboard.NUMBER_0
テンキー 1 Keyboard.NUMBER_1
テンキー 2 Keyboard.NUMBER_2
テンキー 3 Keyboard.NUMBER_3
テンキー 4 Keyboard.NUMBER_4
テンキー 5 Keyboard.NUMBER_5
テンキー 6 Keyboard.NUMBER_6
テンキー 7 Keyboard.NUMBER_7
テンキー 8 Keyboard.NUMBER_8
テンキー 9 Keyboard.NUMBER_9
A Keyboard.A
B Keyboard.B
C Keyboard.C
D Keyboard.D
E Keyboard.E
F Keyboard.F
G Keyboard.G
H Keyboard.H
I Keyboard.I
J Keyboard.J
K Keyboard.K
L Keyboard.L
M Keyboard.M
N Keyboard.N
O Keyboard.O
P Keyboard.P
Q Keyboard.Q
R Keyboard.R
S Keyboard.S
T Keyboard.T
U Keyboard.U
V Keyboard.V
W Keyboard.W
X Keyboard.X
Y Keyboard.Y
Z Keyboard.Z
: * Keyboard.SEMICOLON
; + Keyboard.EQUAL
, < Keyboard.COMMA
- = Keyboard.MINUS
/ ? Keyboard.SLASH
@ ` Keyboard.BACKQUOTE
[ { Keyboard.LEFTBRACKET
\ | Keyboard.BACKSLASH
] } Keyboard.RIGHTBRACKET
^ ~ Keyboard.QUOTE