初心者のためのFlash ActionScript講座
Flash ActionScript Helper
Home Menu

最終更新日: 2003年8月23日

ターゲットパス

Flashムービーの構造

バグの多くが、ターゲットパスの指定ミスでしょう。
Flashでは、ムービークリップのプロパティ(メソッドを含む)にアクセスするには、対象となるムービークリップのターゲットパスを指定しなければなりません。他のオブジェクトのプロパティにアクセスするときも同様です。

FlashムービーをActionScriptから見ると、入れ子になったムービークリップの階層構造としてとらえることができます(メインタイムラインは_rootまたは_level0というムービークリップです。したがって、ステージ上にムービークリップを配置しただけでムービークリップの入れ子を作成したことになります)。

この階層構造は、WindowsやUNIXのファイルシステムと同様に考えることができます。ご存知ない方は、HTMLファイルでリンク先やイメージのソースを指定するときのことを思い出してください。
ムービークリップをディレクトリ(フォルダ)に置き換えると理解しやすくなります。上の例で見てみましょう。まずルートディレクトリ(メインタイムライン:_rootまたは_level0)があり、その下にサブディレクトリ(a1_mc、a2_mc)があり、各サブディレクトリの下にさらにサブディレクトリ(b1_mc、b2_mc)があります。

そして、各ディレクトリ内にファイル(プロパティ)が存在します。
ファイルシステムでは、各ファイルにアクセスするとき、ディレクトリを移動するかパスを指定します。Flashでも、この階層を利用したパス指定によって、ムービークリップ(オブジェクト)のプロパティにアクセスします。

ターゲットパスは、ターゲットへの経路情報であり、いうならば、ムービークリップ(オブジェクト)の所在地を特定するアドレス(住所)だと考えてください。


絶対パス

では、実際のターゲットパスの指定方法を見てみましょう。
これも、ファイルシステムと同じく、絶対パス相対パスの2つの指定方法があります。

まずは、絶対パスからです。
絶対パスは、_rootを起点に、ターゲットまでの一連のムービークリップ(オブジェクト)インスタンス名をドット演算子( . )で区切って指定します。
たとえば、下図の各ムービークリップのターゲットパスは、

_root  → _root
a1_mc → _root.a1_mc
a2_mc → _root.a2_mc
b1_mc → _root.a1_mc.b1_mc
b2_mc → _root.a2_mc.b2_mc

となります。通常は、プロパティにアクセスするわけですから、これらの後ろにさらにドット演算子( . )を付け、変数、定義済みプロパティ、メソッド名などを付加します。

 

this.nWidth = _root._width;               // ルートの_width(幅)プロパティを取得し、変数nWidthに代入。
_root.a1_mc.gotoAndPlay(10);        // ムービークリップa1_mcのgotoAndPlayメソッドを実行(10フレームに移動して再生)。
_root.a2_mc._alpha = 50;                  // ムービークリップa2_mcの透明度を50%に設定。
_root.a1_mc.b1_mc.hensuu = true;   // ムービークリップb1_mcの変数hensuuに 'true' を代入。
_root.a2_mc.b2_mc.play();                 // ムービークリップb2_mcのplayメソッドを実行(再生)。

FlashのVersion4までは、区切り文字としてスラッシュ(/)を使用したスラッシュシンタックスが採用されていましたが、Version5からは上記のようなドット( . )を使用したドットシンタックスが追加採用されています。他の言語への応用が利くように、なるべくドットシンタックスで記述することをお勧めします。

なお、絶対パスは、_rootを起点とした指定であるため、同一の_rootに所属するどのムービークリップからも同じ記述となります。まちがいが少なくて済みますが、記述が長くなりがちです。また、後述するムービークリップをターゲットとしたloadMovieの機能を利用すると、_rootの位置がずれるため、そのままでは動かなくなってしまいます。汎用性の面では、次に説明する相対パスの方が優れています。


相対パス

一方、スクリプトを記述するムービークリップ(オブジェクト)を起点とするパス指定が相対パスです。
絶対パスとは異なり、スクリプトを記述する場所(ムービークリップまたはオブジェクト)によって、記述内容が変わってきます。
相対パスには、2つの重要なキーワードがあります。

まず、ムービークリップやオブジェクト自身のことを this キーワード で表します。自分自身のプロパティにアクセスするときは this.プロパティ名 (例:this._x)、メソッドを呼ぶときはthis.メソッド名() (例:this.gotoAndPlay(5))、配下(子)のインスタンスにアクセスするときは this.インスタンス名 (例:this.a_mc) と記述します。絶対パスのように _root からのすべての経路を記述する必要がなく、省略した記述ができるようになります。
ただし、ひとつだけ例外があります。ボタンインスタンスのonイベントハンドラ内で記述されたthisは、ボタン自身を指さず、配置された親ムービークリップを指します。しかも、ムービークリップインスタンスのonイベントハンドラ内で記述されたthisは、ムービークリップ自身を指します。旧バージョンとの互換性のために残された仕様ですが、ユーザーには混乱をもたらす負の遺産です。まちがえないように十分、注意してください。これに関しては別のページで解説する予定です。

this キーワードは配下のプロパティにだけ使うものではありません。自分が配置されている親ムービークリップ、またその親ムービークリップを指定することもできます。その際に使用するのが、_parent プロパティです。_parent は、ムービークリップ、ボタン、テキストフィールドのプロパティで、this._parent と記述することで、親ムービークリップを示します。さらに、this._parent._parent (親の親)のように、_parent を複数使用することによって、階層をさかのぼった記述をすることができます。
なお、_parent は、ムービークリップ、ボタン、テキストフィールドのプロパティですので、他のオブジェクトでは使用できません。

_parentプロパティの書式

相対パスは、この2つのキーワードを使用して、階層構造を表現します。ただし、相対パスは、後述するレベル間では使用することができません。同一レベル内でのみ使用します。

下図の例で見てみましょう。
スクリプトを c_mc に記述する場合、パスの起点は c_mc になります。
自分自身は this 、親である b_mc は this._parent 、親の親である a_mc は this._parent._parentで表します。


次にスクリプトを a_mc に記述する場合はどうなるでしょうか。
パスの起点である a_mc が this になります。b_mc が子、c_mc が孫の関係ですが、子を表すキーワードは存在しませんので、ムービークリップ名をそのまま指定します。
b_mc は this.b_mc、c_mc は this.b_mc.c_mc となります。ムービークリップを起点とした場合、 this は省略可能ですので、b_mcb_mc.c_mcと記述することもできます。


最後にスクリプトを b_mc に記述する場合も見てみましょう。
パスの起点である b_mc が this 、親の a_mc は this._parent、c_mc は this.c_mc(c_mc)となります。

もうひとつ、枝分かれした他の階層にアクセスする場合も見てみましょう。
b2_mc にスクリプトを記述するものとします。
パスの起点である b2_mc が this 、親の a2_mc は this._parent、親の親の _root は this._parent._parent です。a1_mc、b1_mc は_root の子、孫ですので、この this._parent._parent の後ろにムービークリップ名を記述します。a1_mc は this._parent._parent.a1_mc、b1_mc は this._parent._parent.a1_mc.b1_mc となります。ただし、この記述は効率的ではありません。絶対パスでの記述が可能であれば、そちらを使用した方が、パスの記述は短くなります。



参考ムービー

パス指定を理解するためのムービーを用意しました。
[絶対パス][相対パス]ポタンで、絶対パス/相対パスの切り換えができます。
まず、スクリプト記述元のムービークリップをクリックして選択してください。選択されたムービークリップは黄色に変化します。
次にターゲットのムービークリップをクリックして選択してください。選択されたムービークリップは緑色に変化し、ターゲットパスが下部に表示されます。スクリプト記述元は[Reset]ボタンでクリアできます。




・関連項目

loadMovie使用時のパス指定

(C)2000-2004 Ginga Baba. All rights reserved. お問い合わせ先:ginga@nifty.com
ページTOPへ
Home Menu