Adobe Flash非公式テクニカルノート [ステージのインスタンスを自動宣言]
|
ID: FN1002002 | Product: Flash CS3 and above | Platform: All | Version: 9 and above/ActionScript 3.0 |
予めタイムラインに置いたインスタンスの変数宣言と[パブリッシュ設定]の[ActionScript 3.0の詳細設定]ダイアログボックスにおける[ステージのインスタンスを自動宣言]のオプションについてご説明します。
01 フレームアクションではタイムライン上のインスタンスはつねに自動宣言される
[パブリッシュ設定]([ファイル]メニュー)の[ActionScript 3.0の詳細設定]ダイアログボックス([Flash]タブの[スクリプト]で[ActionScript 3.0]が選ばれているときに[設定]ボタンをクリック)には、[ステージのインスタンスを自動宣言]というオプションがあります(図001)。ところが、コミュニティヘルプを調べても、その詳しい説明はないようです。
[ステージのインスタンスを自動宣言]というのは、予めタイムラインに置いたインスタンスは変数宣言をしなくても、インスタンス名の変数は自動的に宣言されてインスタンスが納められるという機能です。したがって、とくに変数として宣言しなくても、そのインスタンス名を参照して、クラスのプロパティやメソッドにアクセスできます。
もっとも、ActionScript 3.0のフレームアクションでは、このオプションの設定は意味をもちません。予めタイムラインに置かれたインスタンスは、つねに「自動的にそのインスタンス名で変数が宣言され」るからです[*1]。
Flash CS4 Professionalであれば、フレームアクションにあえてインスタンス名を変数宣言しても構いません[*2]。そうすると、[コードヒント]が表示されるので、スクリプトを書くのが楽になります。
02 クラス定義では[ステージのインスタンスを自動宣言]に頼らない
[ドキュメントクラス]やMovieClipシンボルに設定するクラスを定義したとき、[ステージのインスタンスを自動宣言]を設定しておくと、予めタイムラインに置いたインスタンスに変数宣言することなくアクセスできます。
たとえば、Flashムービー(.flaファイル)のメインタイムラインにMovieClipインスタンスmy_mcを置いて、以下のクラスAutoDeclarationをドキュメントクラスを設定したとします。[ステージのインスタンスを自動宣言]に設定しておけば、クラスに変数宣言することなくコンストラクタメソッドからインスタンスにアクセスできます(図002)。
図002■タイムラインに置いたインスタンスを変数宣言することなくコンストラクタからアクセス
package {
import flash.display.MovieClip;
public class AutoDeclaration extends MovieClip {
public function AutoDeclaration() {
trace(my_mc);
}
}
}
けれども、クラスに変数宣言がないと、参照しているインスタンスが何なのかスクリプトとしてわかりにくくなります。また、変数宣言で型指定すれば、コードヒントが表示されますので、正しいスクリプトを素早く書けるでしょう。したがって、[ステージのインスタンスを自動宣言]を設定する利点はあまり考えられません。
なお、Flash CS4 Profesionalでは、[ステージのインスタンスを自動宣言]が設定されていても、クラスにインスタンスを変数として宣言することはできます[*3][*4]。すると、[ステージのインスタンスを自動宣言]の設定をどうするかは、さほど大きな意味がありません。しいていえば、この設定を外した場合、インスタンスを変数宣言しないと[コンパイルエラー]になるということです。
[*1] ヘルプの[ActionScript 3.0 のプログラミング] > [ActionScriptの使用について] > [オブジェクトの操作] > [オブジェクトインスタンスの作成]には、つぎのように説明されています。 Flashでは、ムービークリップシンボル、ボタンシンボル、またはテキストフィールドをステージに配置し、プロパティインスペクタでインスタンス名を割り当てた場合、自動的にそのインスタンス名で変数が宣言され、オブジェクトインスタンスが作成され、そのオブジェクトが変数に格納されます。 なお、併せて「MovieClipインスタンスとインスタンス名」をご参照ください。 [*2] Flash CS3 Professionalでは、フレームアクションでインスタンス名を変数宣言すると、定義に「コンフリクト」(重複)があるという[コンパイルエラー]になります。 [*3] Flash CS3 Professionalでは、[ステージのインスタンスを自動宣言]したうえでインスタンス名を変数宣言すると、定義に「コンフリクト」(重複)があるという[コンパイルエラー]になります。 [*4] タイムラインに置いたインスタンスは、変数をpublic属性で宣言する必要があります。それらのインスタンスに対しては、外部からプロパティやメソッドへのアクセスが許されなければならないからです。
|
作成者: 野中文雄
作成日: 2010年2月27日