プロが教えるわが家の防犯対策術!

こんにちは。
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 に変換できません。

が出ます。
よろしくお願いします。

A 回答 (1件)

> そもそもこのswfにはタイムラインという概念が存在しないので



私は After Effects を持っていないので何とも言えませんが
普通,動画作成&編集ソフトで作成した動画は
タイムラインという概念 "しか" 持たないと思いますよ。
つまり,
普通の動画は スクリプト や 座標 や様々なプロパティ という概念が存在せず,
タイムラインだけがあると思います。
(もしくは タイムライン を格納したオブジェクト(MC)があるかです。)

あと,私の勝手な推測ですが,
After Effects で生成される SWF は
ActionScript 2.0 (AVM1エンジン規格)設定で作成された SWF ではないかと思います。

その辺は After Effects のバージョンや設定に依存すると思うので
SWF ファイルを見てみないと何とも言えません。

何とも言えないので
ActionScript 3.0 設定(AVM2エンジン規格) の場合と合わせて
ActionScript 2.0 の場合のスクリプト例も書いておきます。


◎もし After Effects で生成された SWF が
  ActionScript 3.0 設定の SWF であった場合

-----------------------------
var loader:Loader = new Loader();
var newSWFRequest:URLRequest = new URLRequest("swfs/" + "test" + ".swf");
loader.load(newSWFRequest);
addChild(loader);

//loaderにSWFの最初のフレームがロードされたとき関数 onInit を実行
loader.contentLoaderInfo.addEventListener(Event.INIT,onInit);

//関数 onInit の定義
function onInit(e:Event):void {
//loader内のコンテンツの再生を停止
MovieClip(loader.content).stop();
}
-----------------------------



◎もし After Effects で生成された SWF が
  ActionScript 2.0 設定の SWF であった場合

この場合
そのSWFをロードする 親SWF もActionScript 2.0 設定で作成する必要があります。
その場合のスクリプト例↓

-----------------------------
//ムービークリップ「loader」を最高深度に作成
var loader:MovieClip = createEmptyMovieClip("ld",getNextHighestDepth());

//MovieClipLoader「mcl」を作成
var mcl:MovieClipLoader = new MovieClipLoader();

//リスナー用オブジェクト「obj」を作成
var obj:Object = new Object();

//「mcl」のリスナーとして「obj」を登録
mcl.addListener(obj);

//SWFをロード
mcl.loadClip("swfs/" + "test" + ".swf",loader);

//loaderにSWFの最初のフレームがロードされたときに実行
obj.onLoadInit = function():Void{
//loader内の再生を停止
loader.stop();
}
-----------------------------



最低ラインこの辺までやってみて
その結果からこの先の対策を検討し
その後,
この件とは別に「逆再生」などの方法を思考・模索し
もしわからなければその方法を問うべきでしょう。
(段階を跳び越えすぎですよ。)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!