Accessibility

Flash チュートリアル

ActionScript を使う


目次

  1. はじめに
  2. イベントメソッドについて
  3. イベントメソッドをコールする
  4. 関数をイベントメソッドにアサインする
  5. 関数の中でキーワード "this" を使う
  6. ムービークリップと一緒にボタンイベントメソッドを使う
  7. Flash ドキュメントでイベントメソッドを使う
  8. 先へ進む

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;
};