• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AS3.0でムービークリップ制御)

AS3.0でswfファイルの再生・停止を制御する方法とは?

このQ&Aのポイント
  • AS3.0でswfファイルを読み込み、再生・停止を制御するためのプログラムを作成しようとしています。
  • しかし、現在作成中のプログラムでは停止ができず、困っています。
  • 具体的な原因や解決策について知っている方がいらっしゃいましたら、教えていただきたいです。

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

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

書かれていらっしゃるスクリプト中の 「mc」(MovieClip) は private var mc:MovieClip = new MovieClip(); で作成されたムービークリップなのですから "単フレーム" ですよね。 つまり フレーム1 しか存在しないはずですから 当然,再生 も 停止 もないと思います。 再生 や停止 をさせたいのは 「mc」 ではなくて, 「mc」 に配置した 「l」(Loader) 内にロードした 「animation.swf」 ではないのでしょうか? (↓【図】 参照) もしそうであれば 書かれていらっしゃる private function Stop(e:Event):void{ mc.stop(); } の部分を, private function Stop(e:Event):void{ MovieClip(l.content).stop(); } または, private function Stop(e:Event):void{ var cnt_mc:MovieClip = l.content as MovieClip; cnt_mc.stop(); } などのように変更する必要があります。 --- 補足:階層の話 --- --- --- --- なお書かれていらっしゃる 「l」 は そのドキュメントクラス内で宣言された Loader を参照する変数 「l」 です。 つまり 変数 「l」 はドキュメントクラス階層内直下に存在します。 したがって ムービークリップ「mc」の中に「l」を配置してはいますが MovieClip(mc.l.content).stop(); にはなりません。 もし上記のように書いた場合 『「mc」内の変数「l」が参照するLoader内のコンテンツよ,止まれ。』 という意味になってしまいます。 MovieClip(l.content).stop(); これで 『ここに定義された変数「l」が参照するLoader内のコンテンツよ,止まれ。』 という意味になり,無事に動作します。

valanty
質問者

補足

ご回答ありがとうございます! 無事に動作しました。 ただ、追加で質問があるのですが、swfファイルの作り方などによって動作しない、ということもあるのでしょうか? ご指摘頂いた方法で試した結果、Flash CS5で作成したswf(四角形が楕円に変形するアニメーション)では正常に作動しましたが、javaswfというjavaのライブラリを用いて作成したswf(1フレームごとの点の座標を読み込んで、それを元に点の移動を表したアニメーション)ではstopさせることができませんでした・・・。

その他の回答 (1)

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

#1です。 javaswfというjavaのライブラリというものがどういうものであるのかわかりませんが swfファイルの作り方などによって動作しないという場合は無数にあるでしょう。 そもそも Flash とはタイムラインアニメーションで動かしているとは限りません。 というか... 最近はそういうものは少ないかもしれませんし, またタイムラインアニメーションであってもムービークリップ内の階層に作る場合がかなりあります。 「タイムラインアニメーションで動かしていない場合」というのは ActionScript で動かしている場合です。 SWFのメインのタイムラインはほんの1~数フレームだけで, ActionScriptで延々と動く物はたくさんあります。 そのようなものは当然 「stop() ←タイムラインの再生を止める」 では止まらないでしょう。 > swf(1フレームごとの点の座標を読み込んで、それを元に点の移動を表したアニメーション) これもそうじゃないですか? 実際にはフレームは1フレームしかなくて enterFrame や Event.ENTER_FRAME 系で座標データ通りにインスタンスを動かしているのかもしれません。 もしそうである場合はそういうスクリプトを消さない限り止まりません。 「タイムラインアニメーションであってもムービークリップ内の階層に作る場合」というのも 文字通りそのままのことですが, SWF のメインのタイムラインは 1フレーム くらいしかなくてその そのメインのタイムライン内に置いたムービークリップの中でアニメーションが動いている場合です。 この場合 SWF のメインのタイムラインは 1フレーム くらいしかないのですから これまた当然 「MovieClip(mc.l.content).stop(); ←子SWFのメインタイムラインの再生を止める」 では止まらないでしょう。 内部のムービークリップの中の再生を停止させなければなりません。 また ActionScript 3.0 と 2.0 以下は共存できませんから ActionScript 2.0 以下で作られた SWF を ロード した場合も 思惑通りに動かないのが当然と思った方が良いです。 最初のご質問から 「子SWF も自作のもの」 で 「子SWF はメインのタイムラインを使ったアニメーション」 で 「子SWF も 親SWF も作成環境は同じだろうから ActionScript のバージョンも同じ」 だろう。 と推測したので それを大前提として #1 の回答を書いたのです。 どれかの条件かが変わると,当然 #1 の回答のものでは停止再生のコントロールはできません。  

valanty
質問者

お礼

ご回答ありがとうございます。 やはり作り方(?)の違いでしたか。 では違うアプローチを考えてみます! 今回ご回答頂いた2件はとても参考になり、また勉強になりました! ありがとうございました。

関連するQ&A