メイン 迷える子羊の部屋【初心者専用】 AS3.0 swfを順番に再生したい | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
yonetom | Åê¹ÆNo.45344 投稿日時: 2010-7-24 16:01 |
新米 居住地: 投稿: 3
使用環境:
MacOSX SnowLepard FlashCS4 |
AS3.0 swfを順番に再生したい 連番の外部swfをロードして順番に再生させたいと思っています。いろいろ探したのですが、AS3で良い資料がなく、こちらを使用させていただきます。
出来上がりのイメージとしては *1.swfを再生(次のswfを読み込む)↓ *1.swfの再生が終了(swf内の最終フレームstop();まで再生)↓ *2.swfを再生(次のswfを読み込む).... としたいと思っています。 以下、ソースです。 ============= package { import flash.display.DisplayObjectContainer; import flash.display.MovieClip; import flash.display.Loader; import flash.display.LoaderInfo; import flash.net.URLRequest; import flash.events.Event; import flash.events.ProgressEvent; import flash.events.IOErrorEvent; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; public class ImageLoader2 { var container:DisplayObjectContainer; var imgHolder:MovieClip; var imgLoader:Loader; //var nextImgLoader:Loader; var perFld:TextField; var load_mc:MovieClip; var correntNo:int = 0; var frameNo:Number = 1; var urlList:Array; //コンストラクタ function ImageLoader2 (container:DisplayObjectContainer,urlList:Array) { this.container = container; //ステージセンター var posX:Number = 0;//container.stage.stageWidth / 2; var posY:Number = 0;//container.stage.stageHeight / 2; //イメージを読み込むコンテナを作る imgHolder = new MovieClip(); imgHolder.x = posX; imgHolder.y = posY; container.addChild (imgHolder); //%表示フィールド setupPercentField (posX, posY); //loader作成 imgLoader = new Loader();// Loaderオブジェクトの生成 imgHolder.addChild (imgLoader); imgLoader.contentLoaderInfo.addEventListener (Event.INIT, onInit); imgLoader.contentLoaderInfo.addEventListener (Event.COMPLETE,onLoaded); imgLoader.contentLoaderInfo.addEventListener (ProgressEvent.PROGRESS, onProgress); imgLoader.contentLoaderInfo.addEventListener (IOErrorEvent.IO_ERROR, onIOerror); container.addEventListener (Event.ENTER_FRAME, nextMovie); //URL var urlReq:URLRequest = new URLRequest(urlList[correntNo]); //読み込み開始 imgLoader.load (urlReq); } function onInit (event:Event):void { // リスナーメソッドonInit()の定義 // ロードしたSWFへの参照をMovieClipに型変換 load_mc = MovieClip(imgLoader.content); imgHolder.addChild (load_mc);// load_mcを表示リストに追加 load_mc.gotoAndPlay (frameNo++);// 再生開始 //次の動画を読み込む correntNo++; //URL var urlReq:URLRequest = new URLRequest(urlList[correntNo]); //読み込み開始 imgLoader.load (urlReq); } function nextMovie (event:Event):void { //新しいフレームに来たら load_mc.gotoAndPlay (frameNo++);// 再生開始 //次の動画を読み込む correntNo++; //URL var urlReq:URLRequest = new URLRequest(urlList[correntNo]); //読み込み開始 imgLoader.load (urlReq); } //読み込み完了 function onLoaded (event:Event):void { //プログレスフィールド削除 container.removeChild (perFld); perFld = null; } //途中経過 function onProgress (event:ProgressEvent):void { var per:Number = Math.round(event.bytesLoaded / event.bytesTotal * 100); perFld.text = per + " %"; } //エラー処理 function onIOerror (event:IOErrorEvent):void { trace ("IO_ERROR= "+event.text); } //%フィールド作成 function setupPercentField (posX:Number, posY:Number):void { perFld = new TextField(); perFld.width = 100; perFld.x = posX - perFld.width / 2; perFld.y = posY - perFld.height / 2; perFld.autoSize = TextFieldAutoSize.CENTER; var textFormat:TextFormat = new TextFormat(); textFormat.font = "_ゴシック"; textFormat.size = 48; perFld.defaultTextFormat = textFormat; container.addChild (perFld); } } } ============= 最初タイマーで制御していたのですが、swfの長さが違うことからswf自体の終了判定ができないものかと...思ったのですがどうやらそういう機能がない?という事になりまして、タイムラインでうまく制御できないかと考えています。 以上よろしくお願い致します。 |
ひろゆき | Åê¹ÆNo.45345 投稿日時: 2010-7-24 16:36 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: AS3.0 swfを順番に再生したい 引用:
yonetomさんは書きました: タイムラインのフレーム数は、totalFramesで取れると思いますが。
|
yonetom | Åê¹ÆNo.45350 投稿日時: 2010-7-25 16:08 |
新米 居住地: 投稿: 3
使用環境:
MacOSX SnowLepard FlashCS4 |
Re: AS3.0 swfを順番に再生したい なるほど!値を取ることができました。ありがとうございます。
そこでもう一つ質問なのですが.... 現在のswfの再生中に次のswfを読み込むことはできたのですが...待機することができません。。。 どこがおかしいのか皆目見当がつきません。 見苦しいのですがそのままソースを貼らせていただきます。 ---- package { import flash.display.DisplayObjectContainer; import flash.display.DisplayObject; import flash.events.Event; import flash.utils.Timer; import flash.events.TimerEvent; import TweenImageLoader; public class SlideShow { var targetContainer:DisplayObjectContainer; var urlList:Array; var imgLoader:TweenImageLoader; var currentNo:int; //var timerObj:Timer; //コンストラクタ function SlideShow(container:DisplayObjectContainer,urlList:Array) { targetContainer = container; this.urlList = urlList; currentNo = 0; } //スライドショーの再生開始 public function playSlideShow(delay:int) { if(currentNo == 0){ currentNo = 1; loadImageNo(1) } //再生開始のカスタムイベントを受ける /* timerObj = new Timer(delay); timerObj.addEventListener(TimerEvent.TIMER, nextImage); timerObj.start();*/ } //次のスライドを読み込む function nextImage(event:Event):void { //currentNoのカウントアップ currentNo = (currentNo>=urlList.length)?1:(currentNo+1); loadImageNo(currentNo); } //スライドを読み込む function loadImageNo(imgNo:int):void { if((imgNo>0)&&(imgNo<=urlList.length)){ //URLを取り出す var url:String = urlList[imgNo - 1]; //読み込み開始 imgLoader = new TweenImageLoader(targetContainer, url, 0,0); //再生開始のカスタムイベントを受ける imgLoader.addEventListener(TweenImageLoader.PLAY_START, nextImage); //再生終了のカスタムイベントを受ける imgLoader.addEventListener(TweenImageLoader.TWEEN_FINISH, onTweenFinish); } } //Tween完了。下に隠れた写真を破棄する function onTweenFinish(event:Event):void { if (targetContainer.numChildren >= 2) { var prevPhoto:DisplayObject=targetContainer.getChildAt(1); targetContainer.removeChildAt(1); prevPhoto=null; } } } } ------ package { //カスタムイベント関連パッケージ import flash.events.EventDispatcher; //イメージ読み込み関連パッケージ import flash.display.DisplayObjectContainer; import flash.display.MovieClip; import flash.display.Loader; import flash.display.LoaderInfo; import flash.net.URLRequest; import flash.events.Event; //Tween関連パッケージ import fl.transitions.TweenEvent; import fl.transitions.Tween; import fl.transitions.easing.*; public class TweenImageLoader extends EventDispatcher { public static const TWEEN_FINISH:String = "tween_finish"; public static const PLAY_START:String = "play_start"; var imgHolder:MovieClip; var imgLoader:Loader; var img_mc:MovieClip; var frameNo:int; //コンストラクタ function TweenImageLoader(container:DisplayObjectContainer,url:String,x:Number,y:Number) { frameNo = 1; //イメージを読み込むコンテナを作る imgHolder = new MovieClip(); imgHolder.x = x; imgHolder.y = y; container.addChild(imgHolder); img_mc = new MovieClip; imgHolder.addChild(img_mc); //loader作成 imgLoader = new Loader(); imgHolder.addChild(imgLoader); //imgLoader.contentLoaderInfo.addEventListener(Event.OPEN, startLoad); imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded); //URL trace(url); var urlReq:URLRequest=new URLRequest(url); //読み込み開始 imgLoader.load(urlReq); } //読み込み完了 function onLoaded(event:Event):void { trace("読み込み終了"); //dispatchEvent(new Event(TweenImageLoader.PLAY_START)); img_mc = MovieClip(imgLoader.content); img_mc.play(); trace("再生開始"); img_mc.addEventListener(Event.ENTER_FRAME, playMc); } function playMc(event:Event):void{ trace(img_mc.currentFrame + "/" + img_mc.totalFrames); if(img_mc.currentFrame == img_mc.totalFrames){ //再生終了 img_mc.stop(); trace("再生終了"); img_mc.addEventListener(Event.ENTER_FRAME,onFinish); frameNo++; } } //再生完了 function onFinish(event:Event):void { dispatchEvent(new Event(TweenImageLoader.TWEEN_FINISH)); } } } 以上よろしくお願い致します |
yonetom | Åê¹ÆNo.45362 投稿日時: 2010-7-26 22:32 |
新米 居住地: 投稿: 3
使用環境:
MacOSX SnowLepard FlashCS4 |
Re: AS3.0 swfを順番に再生したい 度々失礼いたします。
以上の件、解決いたしました。 ご回答いただきありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |