SWFのメインタイムラインで、いくつかのレイヤー、いくつかの関数、およびいくつかのキーフレームラベルを使用してフラッシュアニメーションを作成しています。たとえば、画面に出くわした星のムービークリップがあり、メインタイムラインのdispatchEventをトリガーして、フレームラベル「next」に移動します。
メインタイムラインで使用されるアクションスクリプトのサンプルは次のとおりです。
Stars.addEventListener("fadeInTitle",_fadeInTitle);
function _fadeInTitle(e:Event):void {
Title.gotoAndPlay("fadeIn");
Stars.removeEventListener("fadeInTitle",_fadeInTitle);
}
stop();
そのSWFだけでも完璧に機能します。このSWFを別のSWFにロードしようとすると問題が発生します。何が起こるかというと、ローダーはSWFを何度もリロードし続け、それらをオーバーラップさせ、ロードされたSWFのメインタイムラインにあるアクションスクリプトは無視され、タイムラインは継続的に再生されます。SWFをロードするために使用するコードは次のとおりです。
import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;
function startLoad(){
var mLoader:Loader = new Loader();
var mRequest:URLRequest = new URLRequest("Fly.swf");
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
mLoader.load(mRequest);
}
function onCompleteHandler(loadEvent:Event){
addChild(loadEvent.target.content);
}
function onProgressHandler(mProgress:ProgressEvent){
var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
}
startLoad();
そこには特別なことは何もありません。単純なローダー。
アニメーション全体を1つのメインムービークリップ内に配置し、そのムービークリップをメインタイムライン(1つのキーフレーム、1つのレイヤー、アクションスクリプトなし)に配置してからロードすることで、回避策を見つけました。そうすれば問題なく動作しますが、ソリューションというよりはパッチのように感じます。複数のレイヤー、キーフレーム、アクションスクリプトを含むメインタイムラインを使用する外部SWFを読み込もうとすると、なぜバグが発生するのかを知りたいと思います。
ヘルプ/ヒントをいただければ幸いです。
読んでくれてありがとう。
m