Google は、次のような質問はそれほど珍しいものではないことを示唆しています。Loader を使用して何かを Flash ステージにロードした後、サイズを変更したいと考えています。ただし、コンテンツが読み込まれる前にこれを行うと、画像のサイズを変更すると画像が消えてしまいます。
提案された解決策は、通常、Event.COMPLETE のイベント リスナーを使用することです。これが私のコードです:
public function FlixelTest()
{
super();
// support autoOrients
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
myLoader = new Loader();
myLoader.x = (stage.fullScreenWidth-640)/2;
myLoader.y = (stage.fullScreenHeight-480)/2;
addChild(myLoader);
var url:URLRequest = new URLRequest("stuff.swf");
myLoader.load(url);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadProdComplete);
}
function loadProdComplete(e:Event):void{
myLoader.height = 480;
myLoader.width = 640;
}
これまでオンラインで見つけたすべての投稿によると、このソリューションは機能するはずです。イベントが発生すると、ローダーが完了し、サイズを変更できます。しかし、そうではありません。.height と .width を変更する行をコメント アウトすると、SWF が表示され、コメントを解除して再度実行すると、SWF が読み込まれません。
他に何か干渉している可能性はありますか? これは、FlashBuilder を使用して Actionscript3 -> Android プロジェクトを構築しています。
編集 - ここでの解決策も機能していないようです: swf をロードした後のローダーのサイズ変更の問題
更新 - 次のような、機能する恐ろしい解決策があります。
function loadProdComplete(e:Event):void{
if(myLoader.width != 0){
myLoader.width = 640;
myLoader.content.width = 640;
}
else{
timer = new Timer(500);
timer.addEventListener(TimerEvent.TIMER, timertick); // there should be a comma here but yahoo replaces it with ...
timer.start();
}
}
function timertick(e:TimerEvent){
timer.stop();
stage.dispatchEvent(new Event(Event.COMPLETE));
}
基本的に、コンテンツの幅を使用して、読み込みが完了したかどうかを確認します。そうでない場合は、0.5 秒待機してから COMPLETE イベントを再起動します。これは実際に表示に役立ちます(幅は調整されていませんが、それは別の問題だと思います)-これが機能させる唯一の方法だとは信じられません...