5

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

我正在尝试将图像加载到屏幕上,然后在它们实际绘制后做一些事情。

4

2 回答 2

4

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

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

我不能把任何想法归功于我 - 但我会接受赏金;)。这是启发我并充分解释它的文章:http: //jacksondunstan.com/articles/2080

于 2013-01-11T19:17:10.073 回答
0

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

在你的代码中的某个地方你可能有这样的东西:

var loader : Loader = new Loader();
loader.load( new URLRequest( "theURL" ) );
stage.addChild( 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 );
}

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

希望有帮助!

于 2013-01-08T23:32:35.423 回答