トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     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さんは書きました:

最初タイマーで制御していたのですが、swfの長さが違うことからswf自体の終了判定ができないものかと...思ったのですがどうやらそういう機能がない?という事になりまして、タイムラインでうまく制御できないかと考えています。

タイムラインのフレーム数は、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を順番に再生したい
度々失礼いたします。

以上の件、解決いたしました。
ご回答いただきありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops