addChild():我怎么知道DisplayObject实际显示在舞台上的时间?

时间:2013-01-08 20:37:43

标签: actionscript-3 flash addchild displayobject

我有一个大的(4096x4096)图像加载到内存中,但是当我尝试使用addChild时,在它实际被绘制到屏幕之前有一个很长的延迟。这是预料之中的。但是,是否有一个事件我可以听取知道DisplayObject(.png图像)实际绘制到屏幕的那一刻?

我正在尝试将图像加载到屏幕上,然后在实际绘制后执行某些操作。

2 个答案:

答案 0 :(得分:4)

延迟是由于Flash Player解压缩图像以准备渲染。

诀窍是强制Flash Player在你需要之前解压缩 - 然后它会“立即”出现在舞台上。

我不能相信任何想法 - 但我会接受赏金;)。这篇文章启发了我并完整地解释了它:http://jacksondunstan.com/articles/2080

答案 1 :(得分:0)

如果您使用的是Loader类,那是因为内容尚未加载。

在代码中的某处,您可能会遇到以下情况:

var loader : Loader = new Loader();
loader.load( new URLRequest( "theURL" ) );
stage.addChild( loader );

现在,这一切都发生在几毫秒内。但是,您正在加载的内容尚未实际加载。 Loader在舞台上,但在加载完成之前内容不会放在加载器中。

这是你需要做的。

var loader : Loader = new Loader();
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onImageLoaded, false, 0, true );
loader.load( new URLRequest( "theURL" ) );
stage.addChild( loader );

然后将此功能放在同一范围内。

function onImageLoaded( evt : Event ) : void
{
    loader.contentLoaderInfo.removeEventListener( Event.COMPLETE, onImageLoaded );
}

在该功能中,可以访问图像及其所有属性。它可能实际上还没有被绘制到屏幕上,但是这将在下一帧上发生,这可能在几毫秒内,但就代码而言,它是在舞台上。

希望有所帮助!