ActionScript を使う
目次
Flash ドキュメントでイベントメソッドを使う
Macromedia Flash MX は Scrolling_starfield.fla という名前のサンプルムービーを付けて販売されています。このサンプルムービーは、あなたのハードディスクドライブ上の Flash MX 内、Sample フォルダに入っています。(または、[ヘルプ]-[サンプル] を選択し、次に [ゲームエレメント:スクロールする背景] を選びます。) Scrolling_starfield.fla の中の ActionScript を見れば、実際の Macromedia Flash ドキュメントでどのようにイベントが操作されているかを確認していただけます。
Scrolling_starfield.fla の作成者は、メインのタイムラインのフレーム 1 にあるスクリプトにおいて、3つのイベントを操作しています。最初のイベントはメインのタイムラインのための enterFrame イベントです。各ムービークリップのタイムラインには、enterFrame イベントがあり、プレイヘッドがフレーム内にエンターするたびに呼び出されます。フレームが 1 つのムービーにおいても、プレイヘッドは繰り返しこのフレームにエンターし、イベントはそのたびに毎回呼び出されます。Scrolling_starfield.fla の作成者は _root.enterFrame の関数を定義することにより、ムービーが再生されスターフィールド (Star Field) がスクロールする毎に実行される関数を作成しました。関数が onEnterFrame イベントに対してどのように定義されアサインされているのかを理解するために、以下のコードのような関数本文のコードを理解する必要はありません:
_root.onEnterFrame = function() {
with (starfield) {
// move starfield based on the positions of the faders
_x += (horizfader._x-horizfader.initx)/15;
_y += (vertfader._y-vertfader.inity)/15;
//
// loop the starfield
if (_x>initx+220) {
_x = initx;
}
if (_x<initx) {
_x = initx+220;
}
if (_y>inity+215) {
_y = inity;
}
if (_y<inity) {
_y = inity+215;
}
}
};Scrolling_starfield には、generate と toggle の2つのボタンが含まれています。generate ボタンはリリース時に starfield を作成し、toggle ボタンはリリース時に starfield のエッジラインを切り替えさせたり解除したりします。Scrolling_starfield.fla の作成者は各ボタンの onRelease イベントに対して関数を定義しています。繰り返しになりますが、関数が onRelease イベントに対してどのようにアサインされているのかを正しく理解するために、以下のコードのような関数の本文のコードが分かる必要はありません:
// generate starfield when generate button is clicked
generate.onRelease = function() {
for (i=1; i<=300; i += 4) {
for (a=0; a<=3; a++) {
duplicateMovieClip(starfield.star, "star"+(i+a), i+a);
if (i%7 == 0) {
starfield["star"+(i+a)]._xscale = 200;
starfield["star"+(i+a)]._yscale = 200;
}
}
starfield["star"+i]._x = Math.floor(Math.random()*220);
starfield["star"+i]._y = Math.floor(Math.random()*215);
starfield["star"+(i+1)]._x = starfield["star"+i]._x-220;
starfield["star"+(i+1)]._y = starfield["star"+i]._y;
starfield["star"+(i+2)]._x = starfield["star"+i]._x-220;
starfield["star"+(i+2)]._y = starfield["star"+i]._y-215;
starfield["star"+(i+3)]._x = starfield["star"+i]._x;
starfield["star"+(i+3)]._y = starfield["star"+i]._y-215;
}
};
//
// toggle dotted cross-hair visibility
toggle.onRelease = function() {
starfield.centerlines._visible = !starfield.centerlines._visible;
};