• 締切済み

外部swfのMCを親swfから非表示にする

ムービークリップに外部swfを読み込み、 その外部swfファイルのムービークリップを XMLファイルから読み込んだ情報により、表示非表示の切り替えを 行いたいのです。 ========= fileNameXML = new XML(); ・ ・ //ファイル情報XMLファイルの読み込み fileNameXML.load("init.xml"); ・ ・ //ファイル名リストXMLの格納 fileName_temp1 = _root.fileNameXML.childNodes[0].childNodes[0]; ========= かなり抜粋していますが、上記のようにXMLファイルより 情報を読み込んでいます。 ========= _root.main_mc.loadMovie(sub.swf); 親swfのムービークリップに上記のように子swfを読み込み その子swfの中にある、ムービークリップ「btn_next」を XMLファイルより読み込んだ情報で以下のように非表示に変えたいのです。 ========= if (imgNum == 1) { btn_next._visible = false; } ========= 現在は、親swfから子swfのムービークリップを条件によって 非表示に変えられないものかと、色々試しています。 どうすれば、条件による非表示がうまくできるでしょうか。 flashバージョン8、ActionScript2.0 で作成しています。

みんなの回答

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

1つの流れの例ですが。  外部XLMをロードする    ↓  外部XLMのロードが完了する    ↓  外部SWFをロードする    ↓  外部SWFの1フレーム目がロードされる    ↓  それと同時に btn_nex の表示/非表示を指示する という流れが実行されるようにプログラムを組めば良いと思います。 ただし上の流れで行く場合, 「btn_nex」は「sub.swf」の_rootのフレーム1にある というのが条件になります。 肝腎な XML を書かれていませんからよくわかりませんが, XMLをこちらで勝手に作ることにして, サンプルXML例 とActionScript例 を書いてみます。 外部XMLファイル 「init.xml」 のデータ内容↓ ------------------------------------------- <?xml version="1.0" encoding="UTF-8"?> <button> <data imgNum="1" /> </button> ------------------------------------------- 親swfの_rootのフレームに書くスクリプト例↓ ////////////////////////////////////////////////////////////////// // ---SWFロードに関して------------------- // SWFロード監視用のオブジェクト「myObj」を作成 myObj = new Object(); //MovieClipLoaderクラスのインスタンスを作成 myMCL = new MovieClipLoader(); //外部SWFロード完了時の動作を定義 myObj.onLoadInit = function(targetMC) { // 「fileNameXML」の「ノード0」の「ノード0」の属性imgNumが "1" であれば if (fileNameXML.childNodes[0].childNodes[0].attributes.imgNum == "1") { // SWFをロードしたMC内の「btn_next」を非表示にする targetMC.btn_next._visible = false; } }; //「myMCL」のリスナーとして「myObj」を登録 myMCL.addListener(myObj); // ---XMLロードに関して------------------- // XMLクラスのインスタンス「fileNameXML」を作成 fileNameXML = new XML(); //XMLの余分な空白を無視 fileNameXML.ignoreWhite = true; //XMLファイルロード完了時の動作を定義 fileNameXML.onLoad = function(seikou) { // ロードに成功すれば if (seikou) { // 「main_mc」をターゲットとして「sub.swf」をロード myMCL.loadClip("sub.swf", _root.main_mc); } }; //XMLファイル「init.xml」の読み込み fileNameXML.load("init.xml"); ////////////////////////////////////////////////////////////////// ASバージョン:ActionScript1.0 要:Flash Player 7 以上用のSWFにパブリッシュ コードの記述順は  //XMLファイル「init.xml」の読み込み  fileNameXML.load("init.xml"); これが最後ですが, 動作の時間的な流れはここから始まります。 まずその  //XMLファイル「init.xml」の読み込み  fileNameXML.load("init.xml"); これで外部XMLのロードが開始されます。 そして,XMLのロードが完了すると  //XMLファイルロード完了時の動作を定義  fileNameXML.onLoad = function(seikou) {…}; ここで定義した動作が実行されます この中には  // 「main_mc」をターゲットとして「sub.swf」をロード  myMCL.loadClip("sub.swf", _root.main_mc); が書いてあるのでここでSWFのロードが開始されます。 そして, SWFのフレーム1のロードが完了して表示される瞬間に  //外部SWFロード完了時の動作を定義  myObj.onLoadInit = function(targetMC) {…}; ここで定義した動作が実行されます。 この中には  // 「fileNameXML」の「0ノード」の「0ノード」のimgNum属性が "1" であれば  if (fileNameXML.childNodes[0].childNodes[0].attributes.imgNum=="1") {    // SWFをロードしたMC内の「btn_next」を非表示にする    targetMC.btn_next._visible = false;  } が書いてあるので, ここでXMLファイルのデータによって ロードしたSWF内のbtn_nextの 表示/非表示 が決定します。 ロードには時間がかかるので, 2回のロード待ち(ロード完了の取得)をしていることになります。 XMLのロード待ちはXMLクラスのままでできます。 しかしSWFのロード完了などは loadMovie では取得が非常にしにくいため, loadMovie ではなく MovieClipLoaderクラス のスクリプトでSWFをロードしています。 このクラスを使用するため Flash Player 7 以上用の SWF をパブリッシュする必要があります。 他の流れでもで良いですが, 何にしても,まず 「どうしたいのか」 を具体的に考えて, それが辻褄の合った流れで動作するように, 頭の中でシミュレーションすることが大切です。 あと,  // SWFをロードしたMC内の「btn_next」を非表示にする  targetMC.btn_next._visible = false; この部分は, onLoadInitの引数で取得できる「targetMC」を使っていますが, 上の場合ここには「_root.main_mc」が入るとわかっています(1つに定まっています)。 したがって意味的には次と同じになります。  // SWFをロードしたMC内の「btn_next」を非表示にする  _root.main_mc.btn_next._visible = false; このように書いても全く問題はありません。

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

関連するQ&A