外部SWFの制御、プロパティにアクセスについて

このQ&Aのポイント
  • 外部SWFのプロパティ、フレームの制御について悩んでいます。
  • フレームを制御でき、child.swf内部に設定した変数wordを読める方法を教えてください。
  • ネットで検索しても解決策が見つからず、困っています。
回答を見る
  • ベストアンサー

外部SWFの制御、プロパティにアクセスについて

制作環境:Flash CS5、ActionScript3 外部SWFのプロパティ、フレームの制御について悩んでいます。 まず、外部SWFを読み込むSWF:parent.swf、読み込まれるSWF:child.swfがあるとします。 parent.swfはタイムライン1フレームだけで以下を記述しています。 var swfUrlReq:URLRequest=new URLRequest("./child.swf"); var fileLoader:Loader=new Loader(); var mc:MovieClip=new MovieClip(); fileLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeSwf); fileLoader.load(swfUrlReq); function completeSwf(eventObject:Event):void { mc=fileLoader.content as MovieClip; mc.stop(); addChild(mc); trace(mc.word); } child.swfでは総フレーム55くらいで、添付の画像のように左から右に移動して終わるだけのムービーです。1フレーム目にはvar word:String="読めた!!"; 最後の55フレームにはstop();を記述しています。 でいざパブリッシュしてみるとmc.stop();が効かず勝手にムービーが再生され、おまけに以下の「Error #1069: _01_fla.MainTimeline__Preloader__ にプロパティ word が見つからず、デフォルト値もありません。」のエラーでてしまいます。 どうやったらフレームを制御でき、child.swf内部に設定した変数wordを読めるでしょうか?ネットでいろいろ検索引っかかったのですがどれも解決にはなりませんでした、どなたか教えてください、よろしくお願いします。

この投稿のマルチメディアは削除されているためご覧いただけません。
  • Flash
  • 回答数1
  • ありがとう数1

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

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

う~~ん..., わかりませんね。 私の持っているバージョンは Flash CS5 ではなく CS4 なのですが それで書かれていらっしゃる通りのものを作成してみましたが child.swf 中の 「読めた!!」 も出ましたし 再生も停止しました。 ↓【添付図】↓ ひょっとして child.swf のパブリッシュ設定が ActionScript 2.0 になってるのだろうか? などと思い,色々バージョンを変えた実験してみましたが そういう変なことをしたときに出るエラーはご質問のエラーとは違っていました。  TypeError: Error #1009:    null のオブジェクト参照のプロパティまたは    メソッドにアクセスすることはできません。    at parent_fla::MainTimeline/completeSwf() ですから こういったバージョン違いのミスでもないのだろうと思います。 細かいことを言えば var mc:MovieClip=new MovieClip(); の部分はおそらく var mc:MovieClip; のようにするべき (new MovieClip() を取るべき) だとは思いますが こうしても しなくても どちらにしても 「読めた!!」 は出ましたし 再生も停止しました。 以上, 「どうしてそうなる(ご質問のようにうまく行かない現象が起きる)のかわからない。」という報告まで。

yoyoyoiyoi
質問者

お礼

結局ファイルを作り直したら問題なく動きました。 ありがとうございました。

yoyoyoiyoi
質問者

補足

おかしいですよね~ completeSwf関数の中でtrace(mc.totalFrames); やると「2」と出力されるのです。 おかしいですよね?

関連するQ&A

  • AS3での外部swfの制御

    こんにちは。 Flashのコードについて質問させていただきます。 AS3で外部swfを読み込み、制御したいのですが上手くいきません。 ここでいう外部swfはflashで作ったものではなく、aftereffectsでswfで書き出したものです。 var swf:MovieClip; var loader:Loader = new Loader(); var newSWFRequest:URLRequest = new URLRequest("swfs/" + "test" + ".swf"); loader.load(newSWFRequest); addChild(loader); 上記コードでswfを表示+再生は出来ます。 更に、swfを停止、再再生、逆再生などしたいのですが、可能でしょうか? そもそもこのswfにはタイムラインという概念が存在しないので微妙ですが。。。 swf = new MovieClip(); swf .stop(); とか書き足せば、 TypeError: Error #1034: 強制型変換に失敗しました。flash.display::AVM1Movie@231c04a1 を flash.display.MovieClip に変換できません。 が出ます。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • AS3.0による外部swfの制御

    AS3.0による外部swfの制御 質問させていただきます。 やりたいと事は、メインとなるswfのボタンを押して、 読み込んだ外部swf(stopしている)を再生(play)したいと考えております。 メインのswfはAS3.0、読み込む外部swfはAS2.0になります。 環境はFlash CS3です。 以下がスクリプトになります。 //swf読み込み配置 var loader_obj : Loader = new Loader(); var url : URLRequest = new URLRequest("test.swf"); MovieClip(root).loader_obj.load(url); loader_obj.y = 3 loader_obj.x = 392 stage.addChild(loader_obj); //swfボタン制御 btn.addEventListener(MouseEvent.ROLL_OVER,btn_play); function btn_play(event:MouseEvent):void {MovieClip(root).photo.gotoAndPlay(2);//メインswfのムービーリップも動かす <--ここに外部swfを参照するスクリプトが入ると思うのですが・・・-->gotoAndPlay(2);//外部swfの2フレーム目から再生 } 肝心の所のスクリプトはわかりません・・・ 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 外部swf内関数の使い方を教えてください

    actionscript 3でムービークリップ内に読み込んだ外部swf内の関数の使い方を教えてください。 以下仮ソースです var mc:MovieClip = new MovieClip(); var imgLoader:Loader = new Loader(); var path:URLRequest = new URLRequest("materials/key_550.swf"); var childSwf:MovieClip; imgLoader.load(path); imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,compLoader); function compLoader(evt:Event):void{ mc.addChild(imgLoader); addChild(mc); childSwf = mc.imgLoader.content as MovieClip //ここをimgLoader.content as MovieClipとするといけるのですが、mcの子のloaderと指定したいのです。 startGOGO(); } function startGOGO():void{ childSwf.keyContMove(); //子のswf内の関数です。 } よろしくお願い致します。

  • Flash professional CS5を使っており,AS3.0で

    Flash professional CS5を使っており,AS3.0で記述しています。 外部swf(test.swf)をムービークリップ(my_mcとしました)に読み込むには どのようにコードを記述すればよいのでしょうか? MovieClipLoaderを使う物や var urlReq:URLRequest=new URLRequest("test.swf"); var swfLoader:Loader=new Loader(); swfLoader.load(urlReq); このようにロードする方法は見つかったのですが my_mc = loader.content as MovieClip; などとしても ムービークリップに読み込めません。 いろいろ試したのですが直接ステージに読み込まれて表示されたり,エラーも起こらず表示されなかったりします。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • AS3 アクションのクリア

    ボタンクリックで外部のswfを読み込んでいます。 btn1.addEventListener(MouseEvent.CLICK,link1); function link1(event:MouseEvent):void { var req:URLRequest = new URLRequest("movie.swf"); var ld:Loader = new Loader(); ld.load(req); MovieClip(parent).main_mc.mc1.addChild(ld); } 他のボタンにも同じようにmain_mc.mc1にそれぞれのswfを読み込むようにしていますが、 ボタンをクリックするたびに、main_mc.mc1に読み込んだswfが重なって表示されてしまいます。 AS1・2のように自動的にクリアになり新しいswfが読み込まれるということができません。 他のボタンをクリックしたときにmain_mc.mc1に表示されているswfをクリアにする方法はないでしょうか。 ActionScript3は勉強中のため、知識が浅く申し訳ありませんが、わかる方教えてください。 お願いいたします。

    • ベストアンサー
    • Flash
  • AS3のloaderを使って、外部swf(子swf)をloadして再生

    AS3のloaderを使って、外部swf(子swf)をloadして再生する swf(親swf)を作っています。 loadするときに、子swfにflashvarsのパラメータを与えたいと思っています。 子swfでパラメータを使うためです。 その際の、パラメータの渡し方を教えていただきたく思います。 ソースのイメージは以下です。 var loader:Loader = new Loader(); loader.load(new URLRequest("http://~.swf"); URLRequestする際に、swf?id=~ のように書けば、 flashvarsとして与えることが出来ることは分かったのですが、 渡したい値が複数あるため、 可読性をあげるために値を1つずつ設定する方法を探しています。 イメージとしては、以下のような形です。 loader.parameters["id"] = "123"; //parametersという名前は仮です。 loader.parameters["name"] = "sato"; こういったことが可能でしょうか? おわかりになる方、ご教授よろしくお願いいたします。

  • (AS3)外部swfを読み込んだが表示されない

    AS3で、以下のようなコードで外部SWFを呼び出して表示するというプログラムを組んでいるのですが、なぜか画面に表示されません。ContentTypeを調べたりなど色々やってみたところ、情報が取得できるのでなんらかの理由でステージに配置されていない、または配置されているが見えなくなっています。読み込むのを画像データにしてみるとうまくいきます。画像読み込みとSWF読み込みのコードって共通ですよね? package {  import flash.display.*;  import flash.net.*;   public class Main extends Sprite {    function Main():void {     var filename:String = "easy.swf";     var request:URLRequest = new URLRequest(filename);     var loader:Loader = new Loader();     loader.load(request);     addChild(loader);   }  } } 読み込むSWFのバージョンは9.0、このプログラムの書き出しも9.0で行っているのでバージョンの問題でも無いはずです。どなたかお分かりでしたら、どうかご教授お願い致します。

  • 子swfから親swfのstageを参照したいです

    親swf(a.swf)のアクションスクリプトで子swf(b.swf)を読み込んでいます。 フルウィンドウのFlashを作る勉強中です。 親swfには stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; などの指定がしてあります。 そして、子swf(b.swf)内で親swf(a.swf)のstageをターゲットとしたイベントリスナーを使いたいのですが、 リスナー関数のアクションがうまく動いてくれません。 (リスナー関数のターゲット指定の方法が間違っているだと思うのですが、結果としてリスナー関数が正常に動かずy座標の値が意図した位置に表示されないのだと思います。) 以下のサイトを参考に試行錯誤中です。 http://riptac.net/html/memo/memo_actionscript/memo_actionscript_233/ MovieClip(root.parent).funcOya(); と言う、親に記述された関数の参照方法を特に参考にして 親のステージを指定しようと思いたったのですが… 『強制型変換に失敗しました。…flash.display.MovieClip に変換できません。』 とエラーが出てしまいます。 同じ事をしているように思えてしまうのですが… どのように指定したら良いのでしょうか。 どうぞご教授のほど宜しくお願い致します。 ※FlashCS4、AS3、Windowsで作業しています。 a.swf------------------------------------------------------- var bLoader:Loader = new Loader(); var bUrl:String = "b.swf"; var bLoader_mc:MovieClip; bLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, funcCompB); bLoader.load(new URLRequest(bUrl)); function funcCompB(e:Event):void{ bLoader_mc = MovieClip(bLoader.content); addChild(bLoader_mc); } b.swf------------------------------------------------------- //移動させる背景画像 var bgMC:MovieClip=new BgMC(); addChild(bgMC); bgMC.x=0; //親swfをムービークリップ化 var oyaMC:MovieClip=MovieClip(root.parent); //ウィンドウがリサイズするたびに位置を合わせる oyaMC.stage.addEventListener(Event.RESIZE, resizefunc); function resizefunc(event:Event):void{ bgMC.y=oyaMC.stage.stageHeight; }

  • 外部swfのフレームを指定して読み込み

    あるムービークリップ(mc1とします)に外部swf(001.swfとします) を読み込むことはできるのですが、 mc1に001.swfを読み込み、001.swfの50フレーム目から再生ということは可能でしょうか。 いろいろと調べたのですが、どうしてもうまくいきませんでした。 ボタンを作りボタンを押したら読み込み50フレーム目から再生という指示を書いたのですが、、、 on (press) { _root.mc1.loadMovie("top.swf"); _root.mc1.gotoAndPlay(50); } 1フレーム目から再生されてしまいます。

  • AS3.0でムービークリップ制御

    現在、AS3.0でswfファイルを読み込み、その再生・停止をコントロールするswfを作ろうとしています。 そこで自分なりにプログラム書いてみたのですが、停止ができなくて困っています。 以下ソース package { import flash.display.*; import flash.events.*; import flash.net.URLRequest; public class Test extends Sprite { private var mc:MovieClip = new MovieClip(); private var btn_load:SimpleButton = new SimpleButton(); //loadボタン private var btn_stop:SimpleButton = new SimpleButton(); //stopボタン private var l:Loader = new Loader(); public function Test() { mc.x = 30; mc.y = 30; btn_load.upState = this.drawCircle( 0x228822, 20 ); btn_load.overState = this.drawCircle( 0x225522, 21 ); btn_load.downState = this.drawCircle( 0x553355, 20 ); btn_load.hitTestState = btn_load.upState; btn_load.addEventListener( MouseEvent.CLICK, Load ); btn_stop.upState = this.drawCircle( 0x228822, 20 ); btn_stop.overState = this.drawCircle( 0x225522, 21 ); btn_stop.downState = this.drawCircle( 0x553355, 20 ); btn_stop.hitTestState = btn_stop.upState; btn_stop.x = 50; btn_stop.addEventListener(MouseEvent.CLICK, Stop); addChild(mc); addChild(btn_load); addChild(btn_stop); mc.addChild(l); } private function drawCircle( color:uint, r:Number ):Shape { var circle:Shape = new Shape(); circle.graphics.lineStyle( 1, 0x222222 ); circle.graphics.beginFill( color ); circle.graphics.drawCircle( 0, 0, r ); circle.graphics.endFill(); return circle; } private function Load(e:Event):void{ l.load(new URLRequest("animation.swf")); } private function Stop(e:Event):void{ mc.stop(); } } } なにが原因なのでしょうか・・・ わかる方ご回答お願いします。。

    • ベストアンサー
    • Flash

専門家に質問してみよう