我有一个大的(4096x4096)图像加载到内存中,但是当我尝试使用addChild时,在它实际被绘制到屏幕之前有一个很长的延迟。这是预料之中的。但是,是否有一个事件我可以听取知道DisplayObject(.png图像)实际绘制到屏幕的那一刻?
我正在尝试将图像加载到屏幕上,然后在实际绘制后执行某些操作。
答案 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 );
}
在该功能中,可以访问图像及其所有属性。它可能实际上还没有被绘制到屏幕上,但是这将在下一帧上发生,这可能在几毫秒内,但就代码而言,它是在舞台上。
希望有所帮助!