Google建议以下问题并不常见:使用Loader将某些内容加载到Flash舞台中,我想调整它的大小。但是,如果在加载内容之前执行此操作,则调整图像大小会使其消失。
建议的解决方案通常是为Event.COMPLETE使用Event侦听器。这是我的代码:
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;
}
根据我在网上找到的每篇帖子,这个解决方案应该有用。当事件触发时,Loader完成,并且可以调整大小。但事实并非如此。注释掉修改.height和.width的行会导致SWF出现,取消注释并再次运行,SWF永远不会加载。
其他任何事情都可能干扰吗?这是使用FlashBuilder构建一个Actionscript3 - > Android项目。
编辑 - 此处的解决方案似乎不起作用:Problem resizing loader after loading 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事件。这实际上有助于显示它(尽管宽度尚未调整,我认为这是一个单独的问题) - 我无法相信这是让它工作的唯一方法......
答案 0 :(得分:1)
虽然不是严格意义上的解决方案,但我绕过这种方式的方法是根本不调整它 - 我会在窗口上裁剪一个区域,所以所看到的就是我想要显示的部分。
function loadProdComplete(e:Event):void{
var gameMask : Shape = new Shape;
gameMask.graphics.beginFill(0xffcc00);
gameMask.graphics.drawRect(myLoader.x,myLoader.y,640,480);
gameMask.graphics.endFill();
myLoader.content.mask = gameMask;
}
由于无论如何我都需要使用面罩来隐藏场外杂乱,这样就可以解决两个问题。
如果有人有任何其他见解,我不会接受这个答案,但如果有人遇到这个问题,这是一个可靠的解决方案。