2007年05月18日

Flash

マウスやキーボードからの入力

ソースダウンロード

1|前回の続き

前回、if文でムービークリップを動かす課題を出しましたが、 ある部分を調整すると、ほかの部分に影響が出て、面倒なことになったかと思います。

それを解消する方法として、スクリプトを抜き出し、ひとまとめにする方法があります。

function putOnTrack(){
	nimotu._x = track._x;
	nimotu._y = track._y;
}

function(関数)文は、複数のスクリプトを、ひとまとめにしてくれます。
上の例では、PUTを押すと、putOnTrack関数が呼ばれ、
nimotu._x = track._x;
nimotu._y = track._y;
が実行され、
トラックに荷物が載るようになっています。
関数の名前は、自分でわかりやすい名前をつけます。

2|状態で、仕事を分ける

この関数を、使って前回の課題を、部分に分けて見たものが下のものです。
// 初期化
speed = 3;
mc._x = 50;
mc._y = 150;
// はじめの動き
state1();

// 状態1
function state1(){
	onEnterFrame = function(){
		mc._x += speed;
		if(mc._x > 150){
			state2();
		}
	}
}

// 状態2
function state2(){
	onEnterFrame = function(){
		mc._y -= speed;
		if(mc._y < 50){
			state3();
		}
	}
}

// 状態3
function state3(){
	onEnterFrame = function(){
		mc._x += speed;
		if(mc._x > 250){
			state4();
		}
	}
}

// 状態4
function state4(){
	onEnterFrame = function(){
		mc._y += speed;
		if(mc._y > 250){
			state5();
		}
	}
}

// 状態5
function state5(){
	onEnterFrame = function(){
		mc._x -= speed;
		if(mc._x < 50){
			state6();
		}
	}
}

// 状態6
function state6(){
	onEnterFrame = function(){
		mc._y -= speed;
		if(mc._y < 150){
			state1();
		}
	}
}

初期化でspeedとmcの位置を設定します。
そして、はじめの動のstate1関数を呼びます。

function state1(){
	onEnterFrame = function(){
		mc._x += speed;
		if(mc._x > 150){
			state2();
		}
	}
}

関数の中では、ひとつの役割に集中ができます。
mcを右に動かして、150の位置に来ると、次のstate2に仕事を渡しています。
全体の流れは、state1→state2→state3→state4→state5→state6
のようになっていて、ひとつの部分を変更しても、ほかの部分に影響が出にくいようになっています。

3|マウスの動き

マウスは、_xmouseプロパティで値が、取れます。
onMouseMove = function(){
	mc._x = _xmouse;
	mc._y = _ymouse;
}

4|どのキーボードのキーが押されたか

キーボードはややこしいですが、以下のようになります。
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
	textBox.text = Key.getCode();
};
Key.addListener(keyListener);

Key.getCode()で返す値は、アスキーコードになります。
http://e-words.jp/p/r-ascii.html

5|マウスホイール

var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(delta:Number) {
   mc._rotation += delta;
};
Mouse.addListener(mouseListener);

deltaは、回転したときの値を返します。
(windowsのみで動作)