ActionScript最初の一歩(3)

.06 2010 ActionScript comment(0) trackback(0)
無事情報数学の試験も終わって今日からしばらく開発に専念できそうです。

とかいいつつも今日はあんまりやる気が起きないんですね~

やる気がないときはActionScriptみたいに開発環境からデバッグ環境から何から何まで整備されているもので遊んで何かを作った気分になっているのが一番幸せなんだろうな~ というわけで今日はActionScriptで遊びます。

あ~ゆとり世代はこれだからw

今日の目標はキーボードの状態を取得すること。マウスは…必要になったらそのときに調べます。
キーボードに関してFlashが普通のWindowプログラミングと違うところは「キーボードの状態を取得する関数」が用意されていないことです。
Win32APIには確かGetAsyncKeyStateみたいな関数があって、それを呼び出せばその時点でのキーの状態を取得できました。
が、ActionScriptでは、キーが押されたときと離されたときにイベントハンドラが呼ばれるように設定して、キーの状態を格納する変数の値を書き換える必要があります。面倒ですね。
さらに面倒なのはFlashはフォーカスを失うとキーが離されてもイベントハンドラが呼ばれないため、フォーカスを失ったときにキーが離されたことにしないとずっと押しっぱなしになっているように見えてしまうことです。
そんなわけでキーボードの処理に必要なコードはこんな感じ。
/* 変数、定数 */
	private const KBD_NUM: int		= 1;
	private const KBD_RIGHT: int	= 0;
	private var keyState: Vector.<int>	= new Vector.<int>(KBD_NUM, true);
	
/* initに記述 */
	stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownProc);
	stage.addEventListener(KeyboardEvent.KEY_UP, keyUpProc);
	stage.addEventListener(Event.DEACTIVATE, deactiveProc);

/* Event Handler */
private function keyDownProc(event: KeyboardEvent): void
{
	if (event.keyCode == Keyboard.RIGHT) {	// right
		keyState[KBD_RIGHT] = 1;
	}
}

private function keyUpProc(event: KeyboardEvent): void
{
	if (event.keyCode == Keyboard.RIGHT) {	// right
		keyState[KBD_RIGHT] = 0;
	}
}

private function deactiveProc(event: Event): void
{
	// clear all key state
	for (var i: int = 0; i < KBD_NUM - 1; i++) {
		keyState[i] = 0;
	}
}

ArrayよりもVectorの方が高速ってことで今回はVectorを使ってみました。が、VectorはFlashのバージョンが10以上でないとサポートされていないとかで普通にコンパイルしようとしたら文句言われました。
なのでFlashDevelopの設定でオプションに
-target-player=10
ってのをつければctrl + F6でいけるはず…なのですが、
良く分からないけどエラーが消えなかったです。
なので諦めてコマンドプロンプトから
mxmlc -target-player=10 test_timer.as

さすがにこれなら文句はないようです。
というわけでキーボードがらみの使い方が分かりました。今日は以上。

土日はもう少しましなことをやります。
関連記事

  • comment
  • secret
  • 管理者にだけ表示を許可する

trackbackURL:http://yuranos.blog11.fc2.com/tb.php/28-e3763aaa