2007年05月13日

Flash

if文で動きを制御する

1|前回の課題の解答

前回出した、ボタンを交互に切り替える課題ですが、 ポイントは、スクリプトをボタンに書いているかと、 プロパティを変える対象に、名前をつけているかでした。

ボタンにスクリプトを書くときは、まず、ボタンを選択してください。

03_1.jpg

名前をつけるときは、対象を選択後プロパティパネルで変更する。
03_2.jpg

後は、お互いに指示を出すスクリプトを書けば、OK
on(press){
	b._visible = true;
	a._visible = false;
}

Flashのはじめは、何を選択しているのかわかりにくいので、
何を選択しているか、確認しながら作業をするのがポイントです。

2|フレーム入るごとに、プロパティを変更させる。

今回は、ムービークリップの動かし方を解説します。 [ソースのダウンロード] 1.ステージにムービークリップを設置(形は何でもよい。)して、名前をmcとつける。 03_5.jpg 2.Flashの新規作成後、レイヤーを作成して、レイヤー名を「スクリプト」に変更 03_3.jpg 3.スクリプトレイヤーの1フレーム目を選択後、アクションパネルを開きます。 アクションパネルは、下の方に記述している場所が出てくるので、どこに書いているか確認するときに便利です。 03_4.jpg 4.今の位置から、ムービークリップのx座標を3動かしたいので、 以下のスクリプトを記述
mc._x = mc._x + 3;

5.パブリッシュプレビューすると、3ピクセル動いているが、スクリプトが1回しか実行されないので、動いたかどうか解りにくい。
1フレーム目にあるスクリプトをフレームが更新される度に、
スクリプトを実行したいので、「レイヤー1」の1フレームを選択後、
F5キーを押して、フレームを挿入する。
03_6.jpg
6.パブリッシュすると、ムービークリップが動くのが確認できます。

3|表記の簡略化

上の例では、3をプラスするのに
mc._x = mc._x + 3;
と書きましたが、
mc._x += 3;

と書いても、同じ意味になります。
プログラムは、省略してスクリプトを書く習慣があります。

ほかの例では、 1の足し算や引き算は、スクリプトでよく使われるで、 さらに省略されます。
mc._x += 1;
mc._x ++;

また、

mc._x -= 1;
mc._x --;
と書いたりします。

4|if文

上の例でムービークリップの座標を足し続けると、画面の端で見えなくなります。 そこで、画面の端に来たときに、画面の反対側に来るようにスクリプトを書き直します。
mc._x += 10;
if(mc._x >= 550){
	mc._x = 0;
}

if文は()の中のある条件の時、{}の中の処理がされます。
次に、動きが横だけでは面白くないので、縦に動かします。

mc._x += 10;
mc._y += 10;
if(mc._x >= 550){
	mc._x = 0;
}
画面の下側で、ムービークリップが見えなくなるので、 条件を追加します。
mc._x += 10;
mc._y += 10;
if(mc._x >= 550){
	mc._x = 0;
}else if(mc._y >= 400){
	mc._y = 0;
}

else ifは、前のif文に当てはまらなかった、条件を追加できます。

さらに、ifと else ifで当てはまらなかったものは、else文の条件に入ります。
mc._x += 10;
mc._y += 10;
if(mc._x >= 550){
	mc._x = 0;
}else if(mc._y >= 400){
	mc._y = 0;
}else if(mc._y>200){
	mc._alpha = 40;
}else{
	mc._alpha = 100;
}

画面の下で半透明、上で通常の表示になります。

5|ifの条件を絞り込む

下の図のように、条件AかつBの両方を満たした条件のとき、
3_7.gif

このように、条件を&&でつなげて書きます

if(A&&B){}
mc._x += 10;
if(mc._x >= 550){
	mc._x = 0;
}else if(mc._x>100 && mc._x<300){
	mc._alpha = 40;
}else{
	mc._alpha = 100;
}

上のスクリプトでは、mcのx座標が100以上 かつ、300以下なので、
ステージの中央あたりで、半透明になります。


下の図のように、条件AとBを足した条件のとき、
3_8.gif

||で条件をつなげて、書きます。
if(A||B){}

6|フレームを使わないスクリプト

スクリプトを毎フレームごとに、実行させるために、2フレーム目を追加しましたが、 追加しなくてもフレームごとにスクリプトを実行する方法があります。

レイヤー1の2フレームを、右クリック(macではcontorolクリック)で削除します。
03_9.jpg

スクリプトを書き直します。
onEnterFrame = function(){
	mc._x += 10;
}


onEnterFrame = function(){}の中に書かれたスクリプトは、
毎フレームごとに実行されます。

7|三角形の奇跡を書く

if文とonEnterFrameの組み合わせで、三角形を作ります。
onEnterFrame = function(){
	if(mc._x>200 && mc._y<350){
		mc._x += 2;
		mc._y += 4;
	}else if(mc._x>50 && mc._y>=350){
		mc._x -= 4;
	}else{
		mc._x += 2;
		mc._y -= 4;
	}
}

辺の動く範囲をxy座標で確定して、
動きの式(mc._x += 2;等)を書いていくと組みあがってきます。
何度もパブリッシュして、動きを完成させてください。

8|速度を変化させる

今までは一定の速度でしたが、 速度を変えてみたいと思います。 速度の変数speedを定義して、動きのパラメータを置き換えます。
speed = 2;

onEnterFrame = function(){
	if(mc._x>200 && mc._y<350){
		mc._x += speed;
		mc._y += speed*2;
	}else if(mc._x>50 && mc._y>=350){
		mc._x -= speed*2;
	}else{
		mc._x += speed;
		mc._y -= speed*2;
	}
}

speed変数を2にしたので、
2はspeedに
4はspeedの2倍なので、speed*2とします。
(*は、掛け算の意味になります。)

speedを変えるボタンを作って、下のスクリプトを書き込みます。
on(press){
	speed = 10;
}

ボタンを押すとspeedが3から10に変わるので、速度が早くなります。