F-siteセミナー AS3.0で行こう!
Platform: All 1. ActionScript 1.0のMovieClipアクション − Flash 5スタイル (as1/as1_1.fla) 図001■マウスポインタを追いかけてMovieClipが回転する アニメーションの処理は、onClipEvent(enterFrame)ハンドラに記述。マウスポインタの座標値MoiveClip._xmouse/MovieClip._ymouseから、回転する角度を計算する(スクリプト001)[*1]。座標値から角度を計算する関数は、getAngle()としてメインタイムラインに定義する。「マウスの方向に回転」するスクリプトの内容について詳しくは、F-siteセミナー「MovieClipのターゲットパスとプロパティ」を参照。 スクリプト001■マウスポインタに追随してインスタンスを回転するMovieClipアクション
メインタイムラインのフレームアクションに定義したgetAngle()関数は、Math.atan2()メソッドで、座標からラジアン値の角度を取得する。ラジアンから度数への変換比率は、定数(変数)に設定して用いる。変換された度数値を、関数の値として返す(スクリプト002)。 スクリプト002■xy座標から度数値を返す関数getAngle()の定義
[制御]メニューから、[ムービープレビュー]を実行して、動作を確認する。
2. ActionScript 1.0のフレームアクション − Flash MXスタイル (as1/as1_2.fla) onClipEvent(load)ハンドラは初期設定なので、ステートメントを第1フレームに直接記述。onClipEvent(enterFrame)イベントハンドラアクションは、MovieClip.onEnterFrameイベントハンドラメソッドで書替える(スクリプト003)。イベントハンドラメソッドは、名前のない関数で定義する方法のほか、スクリプト003のように名前のある関数で定義することもできる。 スクリプト003■マウスポインタに追随してインスタンスを回転するフレームアクション
上記スクリプト003とメインタイムラインに記述したスクリプト002は、ともにフレームアクションなので、ActionScript 3.0への書替えが可能になる。 3. ActionScript 3.0のフレームアクション (as3/as3_1.fla) MovieClipシンボル内に記述したフレームアクション(スクリプト003)は、大きくふたつの観点からの修正が必要。第1に、イベントハンドラメソッドは、イベントリスナーに変更する。第2は、プロパティ名の変更である。 まず、イベントリスナーとして、処理の内容を任意の関数で定義する。つぎにその関数を、EventDispatcher.addEventListener()メソッドによりイベントリスナーとして登録する。メソッドのターゲットは、イベントを受取るインスタンスになる。 インスタンス.addEventListener(イベント, 関数); プロパティ名は、ActionScript 3.0では先頭にアンダースコア「_」がつかなくなる。さらに、名称の変わったプロパティもある(表001)。 表001■ActionScript 1.0/2.0からActionScript 3.0へのプロパティ名変更の例
以上ふたつのポイントを修正すると、ActionScript 3.0のフレームアクションとして動作する(スクリプト004)。 スクリプト004■ActionScript 3.0で記述したフレームアクション
4. ActionScript 2.0クラス定義 (as2/as2_1.fla、MyClass.as、MyMath.as)
クラス名はMyClassとし、コードブロックにはMovieClipシンボルのフレームアクション(スクリプト003)をカット&ペーストする。そのうえで、スクリプトに加えるべきことが2点ある。第1は、空のコンストラクタ関数を定義すること。そして第2は、extendsキーワードにより、MovieClipクラスを継承することである。 コンストラクタ関数は、インスタンスが作成(配置)されるときに呼出される。初期化に必要な処理を記述することが通常。とくに初期化の処理がなければ、空でも構わない[*2]。 このクラスMyClassは、MovieClipシンボルに設定する。[ライブラリ]パネルでMovieClipシンボルをクリックし、パネルのオプションポップアップメニューから[プロパティ]を選択。[シンボルプロパティ]ダイアログボックスで、[リンケージ]の[アクションスクリプトに書き出し]にチェックをつけ、[識別子]に半角英数字で任意の名前(たとえば"Pen")をタイプしたら、[AS 2.0クラス]に、設定するクラス名"MyClass"を入力する(図002)。 図002■[シンボルプロパティ]ダイアログボックスの[AS 2.0クラス]にクラス名を入力 [AS 2.0]クラスを設定すると、このシンボルのインスタンスは、MovieClipでなくカスタムクラスMyClassのインスタンスになる。そうなると、MyClassのプロパティやメソッドが利用できる反面、MovieClipのメソッドやプロパティは使えなくなってしまう。そこで、extendsステートメントによりMovieClipクラスを継承する。すると、MovieClipクラスをベースとしたうえで、MyClassのプロパティ・メソッドを拡張(extend)するかたちになる。つまり、MovieClipクラスのプロパティ・メソッドも、MyClass自身のものと同じようにアクセスできる。 スクリプト004■ActionScript 2.0でMovieClipのスクリプトをクラス定義
メインタイムラインのフレームアクション(スクリプト002)はそのままにして、[ムービープレビュー]で動作を確認する。問題なく動作することを確かめてから、スクリプト002をActionScript 2.0クラスとして定義する。 スクリプト004と同様の手順で、クラス名はMyMathとして、ActionScriptファイルを作成する。ただし、このクラスはMovieClipシンボルには適用しない。クラスのコードブロックに、メインタイムラインのフレームアクションスクリプト002をカット&ペーストする。追加の内容は1点[*3]。プロパティ(変数)とメソッド(関数)に、staticステートメントを加える(スクリプト005)。 スクリプト005■ActionScript 2.0でメインタイムラインのスクリプトをクラス定義
static宣言したメソッドは、クラスのインスタンスをつくることなく、クラスを直接参照して呼出す[*4]。したがって、MovieClipシンボルに設定したActionScript 2.0クラス(スクリプト004)の中で、getAngle()メソッドを呼出しているステートメントを、MyMath.getAngle()という呼出しに修正する必要がある(スクリプト006)。 スクリプト006■ActionScript 2.0でMovieClipのスクリプトをクラス定義を修正
これで、Flashムービー内のスクリプトは、すべてActionScript 2.0クラスで定義された。
5. ActionScript 3.0のクラス定義 (as3/as3_2.fla、MyClass.as、MyMath.as) 第1に、packageキーワードを用いて、クラス定義全体をすっぽりと囲む必要がある。「パッケージ」は、クラスをフォルダ/ディレクトリのようにグループ分けする機能である。packageキーワードの後に、パッケージ名を指定する。パッケージ名は、指定しないことも可能(今回のサンプルは無指定とした)。 第2に、importステートメントの記述である。ActionScript 3.0では、クラスがパッケージに再構成された。パッケージのクラスを使用するには、importステートメントで、パッケージも含めたクラスのフルパス名(完全修飾クラス名)を宣言しなければならない[*5]。 第3に、classキーワードの前に、属性キーワードpublicを指定する(スクリプト007)。これは、クラスを外部からアクセス可能にする設定である。MovieClipシンボルに設定するクラスは、public指定する必要がある。 スクリプト007■ActionScript 3.0でMovieClipのスクリプトをクラス定義
もうひとつ、EventDispatcher.addEventListener()メソッドの第1引数であるイベントを、文字列"enterFrame"から、Event.ENTER_FRAME定数(プロパティ)に変更した。定数の内容は"enterFrame"という文字列なので、動作結果は変わらない。しかし、Event.ENTER_FRAMEを使うと、文字列とは異なり、スペルミスに対するシンタックスチェックが働く。 ActionScript 2.0と同様に、クラスMyClassはMovieClipシンボルに設定する(図003)。[Test Movie](ムービープレビュー)で動作を確認したら、つぎにメインタイムラインのフレームアクションをクラス定義に書替える。 図003■[Symbol Properties]ダイアログボックスの[Class]にクラス名を入力 ActionScriptファイルを作成して、クラス名はMyMathとする。packageおよびclassをスクリプト007と同様に記述したうえで(public指定はなくてよい)、メインタイムラインのフレームアクション002をカット&ペーストする。ActionScript 2.0のスクリプト005と同じく、メソッドとプロパティにはstatic属性キーワードをつける(スクリプト008)。 スクリプト008■ActionScript 3.0でメインタイムラインのスクリプトをクラス定義
ActionScript 2.0とは異なる点として、プロパティのvar宣言をconstキーワードに替えている。const指定されたプロパティは「定数」(constant)とされ、ひとたび設定した値を書替えることはできなくなる(varのままでも、スクリプトとしては問題なく動作する)。 MovieClipに設定するActionScript 3.0クラス定義(スクリプト007)の、getAngle()メソッドの呼出しをMyMath.getAngle()に修正して完成。 スクリプト009■MovieClipに設定するActionScript 3.0クラス定義を修正
【付記】このセミナーの内容をベースにしたActionScript 3.0の解説を、Flashデベロッパーセンターに寄稿する予定である。掲載された際には、FumioNonaka.comおよびF-siteにその情報を投稿する。 作成者: 野中文雄 Copyright © 2001-2006 Fumio Nonaka. All rights reserved. |
||||||||||||||||||||||||||||||||||||||||