|
Adobe Flash 9 ActionScript 3.0 ActionScript 3.0書き方教室*Flashデベロッパーセンター掲載の記事に、乱丁・落丁があるため、落丁分の本節を暫定的にアップします。 ActionScript 3.0の標準的なフレームアクション 図04-001■ActionScript 3.0の標準的なフレームアクションに修正 第1に、このままではイベントリスナーが必要なくなったとき、削除することができません。イベントリスナーを削除するには、EventDispatcher.removeEventListener()メソッドを呼出します。その引数に、削除すべきリスナーとして、EventDispatcher.addEventListener()メソッドに登録してある関数(function)を渡す必要があります。 インスタンス.removeEventListener(イベント, 関数); ところが、EventDispatcher.addEventListener()に名前のない関数で指定してありますと、どこにも参照が残されていないので、取得しようがありません。そういう訳ですので、EventDispatcher.addEventListenerメソッドに指定するとき、関数には予め名前をつけて定義しておく方が、望ましいということになります。 したがって、イベントリスナーに設定するfunctionを、まず通常の名前のある関数として定義します。定義したタイムライン上では、関数はその名前で参照することができます。ですから、EventDispatcher.addEventListenerメソッドには、引数のイベントリスナーとしてその関数名を渡します。 前節で述べたとおり、「ActionScript 3.0では、クラスが大規模な階層構造になりました」。それらのクラスは、「パッケージ」という機能により、カテゴリー分けされています。パッケージは、ディスクのフォルダ/ディレクトリと同じツリー構造になっていて、パスで表します。ただし、パスの区切り文字はスラッシュ(/)ではなく、ドット(.)です。 たとえば、MovieClipクラスの完全パス表記(「完全修飾クラス名」と呼ばれます)は、flash.display.MovieClipとなります。このflash.displayの部分がパッケージです。ディスク内でファイルを分類・整理して格納するフォルダと同じ役割を、このパッケージが果たします。パッケージのクラスを使うためには、スクリプトの冒頭でimportステートメントを記述して、パッケージ(flash.display)とクラス名(MovieClip)をドット(.)で結んだ「完全修飾クラス名」(flash.display.MovieClip)の宣言が必要です。 import 完全修飾クラス名; 前述のスクリプト03-001では、flash.display.MovieClipクラスの(スーパークラスも含めた)プロパティやメソッドにアクセスしているほか、イベントを管理しそのイベントについての情報を保持するflash.events.Eventクラスも利用しています。したがって、これらのクラスをimportステートメントで、スクリプトの冒頭に宣言する必要があるのです[*10]。 もっとも、スクリプト03-001は、importステートメントを記述することなく、正しく動作しています。「これは、Flashのタイムラインには、デフォルトで必要なクラスが自動的にimportされるためです」[*11]。ですから、スクリプトをフレームアクションに記述し、ActionScript定義済みのおもなクラスを使うかぎりにおいて、importステートメントは必ずしも書かなくても構いません。 けれども、フレームアクションでなくクラスを外部ファイルに定義する場合や、ActionScriptに定義されていない自作あるいは他の人が作成したクラスを利用する場合、さらには自動的にimportされる以外のクラスを用いる場合などに、importの必要性を忘れてあわてる可能性があります。そうならないためには、少なくともimport宣言が必要であることをつねに意識すべきで、またそれを徹底するためにあえてimportステートメントを記述することも有効だと思われます。 さらに、もうひとつ追加したいことがあります。EventDispatcher.addEventListenerメソッドの第1引数に渡すイベントです。"enterFrame"という文字列で渡すことは、もちろん誤りではありません。しかし、この値は、Event.ENTER_FRAMEという定数(プロパティ)で指定することができます。 Event.ENTER_FRAME定数には、結局"enterFrame"という文字列が設定されています。ですから、直接文字列で指定した場合と、動作結果は変わりません。しかし、Event.ENTER_FRAMEを使うと、ふたついいことがあります。 第1は、綴りミスでエラーが返されることです。たとえば、すべて大文字でなければいけない定数の記述に、小文字を交えてEvent.Enter_Frameと書くと、SWF書出し時にエラーが発生します。ところが、文字列の場合には、"EnterFrame"と書いても、何のエラーを生じることもなく、ただ単に動かなくなります。 Event.ENTER_FRAME定数を使う利点の第2は、イベントリスナーとして指定した関数に渡される引数のデータ型が明らかになることです。Eventクラスの定数を指定したということは、イベントリスナーは引数としてEventインスタンスを受取ります。ですから、当然引数は、Eventで型指定されます。これがたとえば、マウスクリックを受取りたい場合であれば、イベントはMouseEvent.CLICKで指定します[*12]。すると、イベントリスナーの関数は、引数をMouseEventで型指定すればよいとわかります。 以上3つの点を考慮してスクリプト03-001を修正すると、つぎのようになります(スクリプト04-001)。 スクリプト04-001■ActionScript 3.0で記述した標準的なフレームアクション
作成者: 野中文雄 Copyright © 2001-2006 Fumio Nonaka. All rights reserved. |
|||