変数の有効範囲

Action Scriptでは変数に有効範囲があり、有効範囲によって以下の種類に分けられます。 有効範囲のことをスコープ(scope)と呼ぶこともあります。

  • メインタイムラインおよびムービークリップ(タイムライン変数またはムービークリップ変数)
  • _globalオブジェクト(グローバル変数)
  • 関数(ローカル変数)

タイムライン変数またはムービークリップ変数

メインタイムラインまたはムービークリップ内のタイムラインにおかれた変数をタイムライン変数またはムービークリップ変数と呼びます。

  • 同一のタイムラインで定義された変数はフレームが変わっても代入したり参照したりすることができます。
  • 異なるタイムラインで定義された変数は普通には代入したり参照したりできません。 異なるタイムラインで記述された場合には、同一の名称でも別の変数として扱われます。 参照したい場合にはドットシンタックスを使用します。

例)タイムライン変数

  1. メインタイムラインに以下のフレームアクションを記述します。
    var test="Main";
    trace("Main:"+test);
    
  2. ムービークリップtest_mcを作成し、ムービークリップtest_mcのタイムラインに以下のフレームアクションを記述します。
    var test="MovieClip";
    trace("MovieClip:"+test);
    

グローバル変数

_globalオブジェクトは、どのタイムラインで定義されていても、どのタイムラインからでも代入したり参照したりすることができます。

例) _globalオブジェクト

  1. 適当なムービークリップのタイムラインの以下のフレームアクションを記述します。
    _global.test="Hello, World!";
  2. メインタイムラインに以下のフレームアクションを記述します。
    trace(test);

グローバル変数と同名のタイムライン変数がある場合にはタイムライン変数が優先されます。

ドットシンタックス

ドットシンタックスとは、インスタンス名やプロパティ名やメソッド名などを「.」(ドット) で連結して記述することです。

ターゲットパス

ムービークリップは階層構造をとるので、インスタンス名を「.」(ドット)で重ねて いくことで、インスタンス中のさらにインスタンス中の…とたどって記述します。これを ターゲットパスといいます。変数やプロパティの参照時、メソッドの実行時などに使用します。

絶対参照

メインタイムラインを参照するときには、_rootプロパティを使用します。_rootから 記述したターゲットパスを絶対パスといい、それ用いた参照を絶対参照といいます。

例 メインタイムラインのフレームで定義されたタイムライン変数

_root.変数名

絶対参照で記述した場合には、メインムービーを他のムービーの中で使用する場合に は、_rootが指すタイムラインが変わってしまうので、再利用する ことを考えると相対参照で記述する方が望ましいとされています。

相対参照

_rootプロパティから始まらないパスは相対パスといい、それを 用いた参照を相対参照といいます。自分自身を参照する場合には、thisプロパティを 使用します。通常、thisは省略することができます。

一つ上の階層を参照するには、_parentプロパティを使用します。

例 一つ上のタイムラインのフレームで定義されたタイムライン変数

_parent.変数名

例 前例のタイムライン変数に追加

メインタイムラインの2フレーム目に以下のフレームアクションを追加します。

trace(test_mc.test);