AS3.0 イベントリスナーについて

このQ&Aのポイント
  • AS3.0 イベントリスナーを使って外部swfの再生が終わったら指定のフレームに移動する方法を教えてください。
  • AS3.0 イベントリスナーを使用して外部swfの再生終了時に特定のフレームに移動する方法を教えてください。
  • AS3.0 イベントリスナーを活用して外部swfの再生が終わったら指定のフレームに遷移する方法を教えてください。
回答を見る
  • ベストアンサー

AS3.0 イベントリスナーについて

お世話になります。 簡単なflashアニメを作っています。 flash cs6 ActionScript3.0使用で、歴1ヶ月未満の初心者です。 1フレーム目に外部swfファイルを以下のように読み込んで再生させています。 var riku:URLRequest = new URLRequest("logoAnime.swf"); var yomu:Loader = Loader = new Loader(); yomu.load(riku); openingMc.addChild(yomu); 再生が終ったら、2フレーム目に移りたいのですが、具体的に どのようなコードを書いたら良いのでしょうか? 今まで色々な参考書やウェブサイトを見て勉強し、イベントリスナーメソッドを使ってマウスイベントでラベルを指定したページに移動、などはできるのですが、外部swfの再生が終ったら..となると混乱してエラー連発してしまいます。 イベントリスナーを使うのですよね? いまいち仕組みがまだ理解できていないので、丸投げのようになってしまい恐縮ですが、ご教授ください。 参考になるウェブサイト・過去回答を教えて頂くだけでも良いので、どうぞよろしくお願い致します。

  • Flash
  • 回答数1
  • ありがとう数0

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

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

ご質問で書かれていらっしゃるような状態を検知して イベントを発動するようなイベントリスナーは存在しませんよ。 したがって自分で状態を見張って動作を発生させるしくみを作る必要があります。 とりあえず Loader内 にロードされた 子SWF についてですが この 子SWF を 親SWF から見れば Loader の content プロパティになります。 Loader.content です。 ご質問の場合 yomu が Loader ですから つまり yomu.content で参照できるということになります。 しかし その yomu.content をそのまま参照すると DisplayObject として扱われてしまうため MovieClip に変換する必要があります。 MovieClip(yomu.content) この 子SWF である MovieClip(yomu.content) の再生フレームを取得して その再生フレームが最終フレームになれば 親SWF の再生を開始させれば良いということですよね。 ですからスクリプト(例)は次のようになります↓。 //------------------------------------ //このフレームで再生を停止 stop(); //※次の4行はご質問で書かれていらっしゃる内容 var riku:URLRequest = new URLRequest("logoAnime.swf"); var yomu:Loader = new Loader(); yomu.load(riku); openingMc.addChild(yomu); //関数 watchLogoFrame を毎フレーム実行 addEventListener(Event.ENTER_FRAME,watchLogoFrame); //関数 watchLogoFrame の定義 function watchLogoFrame(e:Event):void { //もしロードしたSWFが null ではなくて if (yomu.content != null) { //もし ロードしたSWF の再生フレームが最終フレームになれば if (MovieClip(yomu.content).currentFrame == MovieClip(yomu.content).totalFrames) { //関数 watchLogoFrame の毎フレーム実行をやめる removeEventListener(Event.ENTER_FRAME,watchLogoFrame); //フレーム2から再生開始 gotoAndPlay(2); } } } //------------------------------------ 上記スクリプトの //フレーム2から再生開始 gotoAndPlay(2); この部分は //フレーム2で再生停止 gotoAndStop(2); かもしれませんし //再生開始 play(); で良いかもしれません。 この辺は適当に変えてもらえば良いと思います。

関連するQ&A

  • 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
  • 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
  • Flash as3.0版ソース  ボタンで内容遷移、うまくいかない…

    こんにちは。 Flash as3.0勉強始めてばかりです。 下記のソースのエラーはボタンを押したたびに、表示した内容はどんどん重ねています。たとえば、(1)ボタンを押した場合、(1)の内容を表示されまして。(2)ボタンを押したとき、画面には(1)+(2)の内容を表示されています。 いろいろ調べましたんですが、なかなかうまくいかないです。 ご解答をよろしくお願い致します。 詳細ソース ーーーーーーーーーーーーーーーーーーーーーー // イベントを設定 Button_tsr.addEventListener ( MouseEvent.CLICK , onClick1 ); Button_gaiyou.addEventListener ( MouseEvent.CLICK , onClick2 ); Button_message.addEventListener ( MouseEvent.CLICK , onClick3 ); Button_jigyou.addEventListener ( MouseEvent.CLICK , onClick4 ); Button_saiyou.addEventListener ( MouseEvent.CLICK , onClick5 ); Button_toiawase.addEventListener ( MouseEvent.CLICK , onClick6 ); // ローダーオブジェクトを作成し配置 var loader_obj : Loader = new Loader(); stage.addChild (loader_obj); loader_obj.x = 85; loader_obj.y =97; // 画面クリックをするとonClickが動作するイベント function onClick1 ( event:MouseEvent ) { // URLRequestを設定 var url0:URLRequest = new URLRequest( "Top.swf" ); // 実際にページに飛ぶ loader_obj.load ( url0 ); } function onClick2 ( event:MouseEvent ) { // URLRequestを設定 var url1:URLRequest = new URLRequest( "概要.swf" ); // 実際にページに飛ぶ loader_obj.load ( url1 ); } function onClick3 ( event:MouseEvent ) { // URLRequestを設定 var url2:URLRequest = new URLRequest( "Message.swf" ); // 実際にページに飛ぶ loader_obj.load ( url2); } function onClick4 ( event:MouseEvent ) { // URLRequestを設定 var url3:URLRequest = new URLRequest( "サービス.swf" ); // 実際にページに飛ぶ loader_obj.load ( url3); } function onClick5 ( event:MouseEvent ) { // URLRequestを設定 var url4:URLRequest = new URLRequest( "情報.swf" ); // 実際にページに飛ぶ loader_obj.load ( url4); } function onClick6 ( event:MouseEvent ) { // URLRequestを設定 var url5:URLRequest = new URLRequest( "問合せ.swf" ); // 実際にページに飛ぶ loader_obj.load ( url5); }

  • 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)外部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の制御、プロパティにアクセスについて

    制作環境: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
  • 外部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内の関数です。 } よろしくお願い致します。

  • AS3.0 写真の切り替え

    調べても調べても漠然とした状態が続いてるので質問させていただきました。 まず、サンプルとしてこんなようなものが作りたいんです。 http://www.subaru-sls.co.jp/ ここの企業みたいな写真が一定時間でその場所その場所に移動していくというのを作りたいのですが、今後のことを考え、タイムラインにASを組むのではなく、外部AS(ドキュメントクラス?)だけで作りたいのです。 因みに写真などの配置はなんとかできたのですが、写真が切り替わるのがまったくわかりません。 こちらが現状況のコードになります。↓ package { import flash.display.Sprite; import flash.display.Loader; import flash.net.URLRequest; import flash.display.Shape; import flash.events.TimerEvent; import flash.utils.Timer; import flash.events.MouseEvent; import flash.display.Bitmap; [SWF(width = "550",height = "400")] public class main extends Sprite { //プロパティ var mc01:Sprite = new Sprite(); var mc02:Sprite = new Sprite(); var mc03:Sprite = new Sprite(); var imgUrl01:String = "kabegami1.jpg"; var imgUrl02:String = "kabegami2.jpg"; var imgUrl03:String = "kabegami3.jpg"; var onUrl01:URLRequest = new URLRequest(imgUrl01); var onUrl02:URLRequest = new URLRequest(imgUrl02); var onUrl03:URLRequest = new URLRequest(imgUrl03); var img01:Loader = new Loader(); var img02:Loader = new Loader(); var img03:Loader = new Loader(); var square01:Shape = new Shape(); var square02:Shape = new Shape(); var square03:Shape = new Shape(); var i:int = 0; var timer:Timer = new Timer(20); //コンストラクタ public function main () { init (); } //メソッド private function init () { square01.graphics.beginFill (0x000000); square02.graphics.beginFill (0x000000); square03.graphics.beginFill (0x000000); square01.graphics.drawRect (10, 10, 330, 380); square02.graphics.drawRect (350, 10, 110, 380); square03.graphics.drawRect (470, 10, 70, 380); square01.graphics.endFill (); square02.graphics.endFill (); square03.graphics.endFill (); img01.mask = square01; img02.mask = square02; img03.mask = square03; img01.load (onUrl01); img02.load (onUrl02); img03.load (onUrl03); addChild (square01); addChild (square02); addChild (square03); addChild (img01); addChild (img02); addChild (img03); timer.addEventListener (TimerEvent.TIMER,onTimer); timer.start (); img01.addEventListener (MouseEvent.MOUSE_DOWN,mouseDownHandler); } private function mouseDownHandler (event:MouseEvent):void { } private function onTimer (event:TimerEvent):void { i++; img01.alpha -= 0.01; } } } 長文になってしまいましたが、どうかご教授お願いします。

    • ベストアンサー
    • Flash
  • AS2.0からAS3.0にうまく変換できません。

    AS2.0からAS3.0にうまく変換できません。 はじめまして、ActionScriptを勉強し始めたばかりの初心者です。 http://blog.bonkura.jp/2008/07/flash-4.html のページのスクリプトをas3.0に直そうと思って勉強しながらやってみたんですが、 どうもうまくいきません。 書いてみたコードは以下です。 だれか添削してもらえると助かります。宜しくお願いします! stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.LEFT; var bg:MovieClip = new MovieClip(); this.setChildIndex(bg, 1); var bgPic:MovieClip = new MovieClip(); this.setChildIndex(bgPic, 0); bgPattern(); function bgPattern():void{ var myMcl:Loader = new Loader(); var oListener:Object = new Object(); var UrL:URLRequest = new URLRequest(); UrL.url = "http://blog.bonkura.jp/2008/07/08/swf/bg.jpg"; myMcl.addChild(oListener); myMcl.load(UrL, bgPic); oListener.addEventListener( Event.COMPLETE, StageSize); for(var i:Number=0; i<stage.width/100; i++){ for(var j:Number=0; j<stage.height/100; j++){ var bgP:String = "bg"+i+j; bg.addChild(new (getDefinitionByName(bgP))); this.setChildIndex(bgP, i+j*100); bg[bgP].x = i * 100; bg[bgP].y = j * 100; } } } var alphaFlag:Boolean = new Boolean(); alphaFlag = true; bg.addEventListener(Event.ENTER_FRAME, onENTERFrame); bg.addEventListener(Event.RESIZE, bg.resizeHandler); stage.addChild(bg); stage.addChild(bgPic); function StageSize():void{ bgPic.x = (stage.width/2) - (bgPic.width/2); bgPic.y = (stage.height/2) - (bgPic.height/2); } // イベントリスナー function onENTERFrame(event:Event) { if(alphaFlag){ this.alpha -= 5; if(this.alpha <= 0){ alphaFlag = !alphaFlag; } } else{ this.alpha += 5; if(this.alpha >= 100){ alphaFlag = !alphaFlag; } } } function resizeHandler(event:Event = null):void{ bgPattern(); };

    • ベストアンサー
    • Flash
  • 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

専門家に質問してみよう