为什么宽度和宽度加载SWFLoader的高度为零?

时间:2008-10-16 10:20:30

标签: flex flash

我有一个扩展SWFLoader的类,我像普通的SWFLoader一样使用它:

var loader:MySWFLoader = new MySWFLoader();
loader.load("myFile.SWF");
myScene.addChild(loader);

加载工作正常,但由于宽度和宽度保持为0。高度永远不会从0改变。我必须覆盖宽度/高度获取属性才能使其工作:

class MySWFLoader extends SWFLoader
{
public override function get width():Number{    return contentWidth;    }
public override function get height():Number{   return contentHeight;   }
}

除了成为一个大黑客,这是不正确的;特别是因为SWF有多个框架,框架的宽度/高度不同。

为什么宽度/高度首先不起作用?它们不应该在加载过程中自动设置吗?问题可能出在SWF本身吗?

更新:将scaleContent更改为true或false没有任何区别。

4 个答案:

答案 0 :(得分:2)

我不确定这是否适用于SWF加载,但每当我加载内容时,我都无法在加载整个内容之前访问宽度和高度。

所以让一个事件监听器在加载完成时监听,然后读取高度/宽度。

另请参阅AS3中的loaderInfo类

答案 1 :(得分:1)

我不确定你试图获取高度和宽度的周期的哪一部分(以及加载器对象或加载的内容)但你可以使用以下方法访问加载对象的高度和宽度SWFLoader.loaderInfo.height和SWFLoader.loaderInfo.width。

答案 2 :(得分:0)

默认情况下,SWFLoader将内容缩放到加载器的大小,因此您必须设置加载器的大小。如果您希望加载器扩展到内容的大小,那么您必须将scaleContent属性设置为false。

答案 3 :(得分:0)

SWFLoader是一个UIComponent。

需要通过UIComponent框架运行才能正确设置其尺寸

换句话说,它正在等待对commitProperties(),updateDisplayList()等的调用。

如果你把它放在你的应用程序中(以便它是布局框架的一部分),它应该没问题。