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));
}
它基本上使用内容的宽度来查看它是否已完成加载。如果没有,它会等待半秒并重新触发 COMPLETE 事件。这实际上有助于显示它(虽然宽度尚未调整,我认为这是一个单独的问题) - 我不敢相信这是让它工作的唯一方法......