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のみで動作)