アクセシビリティ

Flash記事

 

ActionScript 3.0書き方教室


目次

ActionScript 1.0のフレームアクション

ActionScript 3.0は、インスタンスにスクリプトを記述できません。したがって、少なくともフレームアクションにする必要があります。Flash MXでは、イベントハンドラメソッドの採用により、フレームアクションにイベントハンドラが書けるようになりました。そこで、スクリプト01-001を、 このFlash MXスタイルで、フレームアクションとして記述してみましょう。

まずは、スクリプト01-001をカットして、そのまま回転するMovieClipシンボル内の第1フレームにペーストします。フレームアクションには、onClipEvent()イ ベントハンドラアクションが使えません。使えばSWFの書出し時にエラーが発生してしまいます。そこで、onClipEvent(load)と onClipEvent(enterFrame)のふたつのイベントハンドラアクションを、フレームアクションに適したかたちに書替える必要があります。

まず、onClipEvent(load)は最初に呼出されるので、初期設定に用いられます。しかし、フレームアクションでは第1フレームに書きさえすれば、最初に処理されます。したがって、onClipEvent(load)イベントハンドラアクションは({}も含めて)単純に削除し、中身のステートメントをフレームに直接記述します。

まず、onClipEvent(load)は最初に呼出されるので、初期設定に用いられます。しかし、フレームアクションでは第1フレームに書きさえすれば、最初に処理されます。したがって、onClipEvent(load)イベントハンドラアクションは({}も含めて)単純に削除し、中身のステートメントをフレームに直接記述します。

図02-001 MovieClipアクションをイベントハンドラメソッドでフレームアクションに移行

つぎに、イベントハンドラアクションonClipEvent(enterFrame)は、イベントハンドラメソッドのMovieClip.onEnterFrameに書替えます。イベントハンドラメソッドというのは、基本的に関数(function)です。したがって、onClipEvent(enterFrame)に替えて、function onEnterFrame()を記述します*5

イベントハンドラメソッドを使ってフレームアクションに書替えたスクリプトはつぎのとおりです。なお、メインタイムラインに関数getAngle()を定義したフレームアクション(スクリプト01-002)は、そのまま変更はありません。

スクリプト02-001 マウスポインタに追随してインスタンスを回転するフレームアクション

// MovieClip: マウスを追いかけて回転するインスタンス
// 第1フレームアクション
var nDeceleration:Number = 0.2;
function onEnterFrame():Void {
  var nDegree:Number = _root.getAngle(_xmouse, _ymouse);
  _rotation += nDegree*nDeceleration;
}

MovieClipのスクリプト02-001とメインタイムラインのスクリプト01-002はともにフレームアクションですので、これでActionScript 3.0に書替えることが可能になります。


*5 イベントハンドラメソッドMovieClip.onEnterFrameを定義するつぎのふたつの記述方法は、基本的に同じ結果になります。
// イベントハンドラメソッドを名前のない関数で設定
this.onEnterFrame = function():Void {
  ステートメント;
};

// イベントハンドラメソッドそのものを関数として定義
function onEnterFrame():Void {
  ステートメント;
}

前者は名前のない関数、後者が名前のある関数による定義です。ふたつの関数(function)の違いについては、「名前のない関数(匿名関数/関数リテラル)」をご参照ください。