• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:こんにちは。 )

ActionScript2.0でステージ上のインスタンスの名前を取得する方法

このQ&Aのポイント
  • Flash初心者のため、ActionScript2.0でステージ上のインスタンスの名前を取得する方法を教えてください。
  • ステージ上のインスタンスをクリックした際、そのインスタンスの名前を取得し、変数に格納して後の処理に使いたいです。
  • 具体的な使用例として、インスタンスにつけられた名前に応じてシーンにジャンプするスクリプトを作成する際に、クリックしたインスタンスの名前を取得する方法を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

ActionScript において 「シーン」 はすごく特殊なものです。 まずその事に注意してください。 まず MovieClip.gotoAndPlay() などの gotoAndPlay()メソッド でシーン移動をさせることはできません。 シーン名を使う場合は必ず,gotoAndPlay()関数 など関数の方を使用する必要があります。 それだけならまだしも,シーン名指定をするには引数を2つにして, なおかつ その第1引数に必ず「引用符("")」でくくられた文字列を記入する必要があります。 メソッドと関数についてですが, this.gotoAndPlay(○); は ムービークリップクラスの gotoAndPlay() メソッドです。 gotoAndPlay(○); は this.gotoAndPlay(○); の this 省略形ではなく全く別物の gotoAndPlay()関数 です。 通常の ActionScript は Flash再生ソフトである Flash Player(または Flash Lite) に対して動作命令をする言語です。 しかし この gotoAndPlay()関数 の引数を2つのものは, Flash Player に対する動作命令だけではなく,半分Flash作成ツールに対する動作命令語なのです。 gotoAndPlay("シーン 2", 1); は, まずFlash作成ツールに "シーン 2" という名のシーンを探させて その "シーン 2" の フレーム1 の絶対フレーム番号を算出させ gotoAndPlay(○); に変換をかけてから SWF 内に送りこむという変わった関数です。 ※理由:シーンはSWF内に存在しないため 例えば "シーン 1" が フレーム10 まであって,次に "シーン 2" があったとします。 その場合 gotoAndPlay("シーン 2",1); は Flash作成ツール上で gotoAndPlay(10+1); → gotoAndPlay(11); と変換されて SWF 内にパブリッシュされます。 Flash作成ツール 上ではまだ変数はどうなるのかわからないため(閲覧者の動向などによって変わるため)計算不可能です。 したがって必ず「引用符("")」でくくられた リテラル にする必要があります。 === === ですからとりあえずご質問の場合 シーン名 を使うという方法はやめましょう。 (やめるのは シーン"名" の利用です(シーン自体ではありません)) シーン「a」 のフレーム1には例えば 「a」 という 「フレームラベル」名 を付けます。 シーン「b」 のフレーム1には 「b」,シーン「c」 のフレーム1には 「c」という フレームラベル名 を付けます。 そして次のようにスクリプトを書きます。 スクリプト例1 -------------- a.onRelease = b.onRelease = c.onRelease = function() { gotoAndPlay(this._name); }; -------------- スクリプト例2 -------------- // 名前登録用配列 nameArr を作成 nameArr = new Array("a", "b", "c"); // 配列の用素数分ループ for (i=0; i<nameArr.length; i++) { this[nameArr[i]].onRelease = function() { gotoAndPlay(this._name); }; } -------------- 「FN0205002 - gotoAndPlay/gotoAndStopでシーンの移動ができない...」 http://fumiononaka.com/TechNotes/Flash/FN0205002.html  

hk-sulo
質問者

補足

とても丁寧に回答してくださり、ありがとうございます。 シーンについてはリンク先も拝見して、概ね理解できた、と思うのですが、 実際に書かれているスクリプトを試してみたところ、うまくいきません。 シーンを3つ用意して、それぞれの最初のフレームラベルをa,b,cとし、さらにa,b,cという3つのインスタンスをそれぞれのシーンの最初のフレームに配置し、スクリプトを試してみました。 すると、aをクリックするとそのままのシーン(フレームa)のはずなのに、次のシーン(フレームb)にジャンプしてしまいます。さらにそこでaをクリックすると次のシーン(フレームc)にジャンプします。 これはどうしてなのでしょうか。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

別にイベントターゲットを取得するようなやり方しなくても どうせインスタンスを巡回しなくちゃいけないのだから var nameList=["a","b","c"] for each(var nm in nameList){ this[nm].onRelease=function(){gotoAndPlay(nm,1) } みたいなカンジでもいいかと

hk-sulo
質問者

補足

回答いただき、ありがとうございます。 いただいたスクリプトの中で、for eachという部分がよく分かりません。 スクリプトの意味的にはperlのforeachのようなものでしょうか? flashのヘルプを見ても載っていないようです。

すると、全ての回答が全文表示されます。