loaderで読み込んだswf(AVM1Movie)の再生制御
詰まったのでメモ。
やりたいこと
あるところにAIRアプリ"Player"とswfファイル"Movie.swf"がありました。
"Player"で"Movie.swf"を読み込んで、再生する。
"Player"上でクリックすると"Movie.swf"のフレームを1つ進め、
右クリックすると"Movie.swf"のフレームを1つ戻したい。
問題と解決策
swfには、
- AVM1Movie(AS2orAS1で書かれたFlash)
- AVM2Movie(AS3で書かれたFlash)
の2種類がある。
"Movie.swf"がAVM2Movieの時は、"Player"で
-
var loader:Loader = new Loader();
-
loader.load(new URLRequest("Movie.swf") );
-
addChild(loader);
-
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event):void{
-
MovieClip(loader.content).gotoAndStop("hoge");
-
});
ってすれば簡単に上記のやりたいことが達成できる。たぶん。
でも、"Movie.swf"がAVM1Movieの時はそうはいかない。
でもでも、ForcibleLoaderをつかえばできるよ!
-
var loader:Loader = Loader(addChild(new Loader()));
-
var fLoader:ForcibleLoader = new ForcibleLoader(loader);
-
fLoader.load(new URLRequest('Movie.swf'));
-
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (e:Event):void{
-
MovieClip(loader.content).gotoAndStop("hoge");
-
});
これで、できるはず。...なんだけどコンパイルするとエラーがでる。
このエラーが出ないようにするために、ForcibleLoader.asを修正する。
-
loader.loadBytes(inputBytes);
を、これに書き換える。
-
var loaderContext:LoaderContext = new LoaderContext();
-
loaderContext.allowLoadBytesCodeExecution = true; // that's it!
-
loader.loadBytes(inputBytes, loaderContext);
that's it! これでできた!
と、思いきや、実はまだ問題がある。
それは、フレームを進めることはできるけど、戻すことができないこと。
-
stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
-
MovieClip(loader.content).gotoAndStop(MovieClip(loader.content).currentFrame+1);
-
});
これで、"Player"をクリックしたときに"Movie.swf"が次のフレームに進むけど、
-
stage.addEventListener(MouseEvent.RIGHT_CLICK, function(e:MouseEvent):void {
-
MovieClip(loader.content).gotoAndStop(MovieClip(loader.content).currentFrame-1);
-
});
これは何故か動かない。
でも、一番最後のフレームに行った後なら、フレーム戻れるよ!
-
stage.addEventListener(MouseEvent.RIGHT_CLICK, function(e:MouseEvent):void {
-
var tmp:int = MovieClip(loader.content).currentFrame;
-
MovieClip(loader.content).gotoAndStop(MovieClip(loader.content).framesLoaded);
-
MovieClip(loader.content).gotoAndStop(tmp-1);
-
});
これで、"Player"を右クリックしたときに"Movie.swf"が1つ前のフレームに戻るようになった。無理やりだけど。
参考URL
yossy/ForcibleLoader - Spark project
AVM1Movie Controller in Flex ? Flex User
とりあえずはswfファイルの制御 - ichiro_jの日記
Markus Raab - All I don’t know. ? Blog Archive ? Select and access local SWF files within an AIR application
FLASH-JP.COM - フォーラム
神風記: ロードしたSWFのタイムラインを制御する。

コメントをどうぞ。
TrackBack URI :