【发布时间】:2011-08-17 12:34:43
【问题描述】:
当我在函数中将 DisplayObject 添加到 DisplayObjectContainer(例如 Sprite 到 Sprite)时,看来DisplayObject其实并不是立即添加的,而是在完成函数之后。
看这个例子:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
public class AddChildTest extends Sprite {
private var _sprite:Sprite;
public function AddChildTest():void{
var button:Sprite = new Sprite();
button.graphics.beginFill(0x00ff00);
button.graphics.drawRect(0, 0, 50, 50);
button.graphics.endFill();
button.buttonMode = true;
button.addEventListener(MouseEvent.CLICK, onClick);
addChild(button);
}
private function onClick(event:MouseEvent):void {
_sprite = new Sprite();
_sprite.graphics.beginFill(0xff0000);
_sprite.graphics.drawRect(0, 0, 50, 50);
_sprite.graphics.endFill();
_sprite.x = 50;
_sprite.y = 50;
//this red sprite is not visible immediateley!
addChild(_sprite);
//put something time-consuming here
for (var i:int = 0; i < 2000; i++){
trace(i);
}
}
}
}
所以我们有一个简单的绿色按钮,当它被点击时,会有一个红色的Sprite被构建并添加到舞台上。 但实际上,在 onClick() 函数完全执行之前,红色的 Sprite 是不可见的。
为什么会这样?我该怎么做才能让红色 Sprite 立即可见?
是否有一些(对于开发人员不可见的)全局 paint() 或 update() 函数,在某些堆栈完全执行之前不会执行?
【问题讨论】:
-
试试 this.invalidateDisplayList()
-
Sprite 不是 mx.core.UIComponent,所以那里不存在这个函数。
-
哎呀没有注意到它是一个精灵
标签: flash actionscript-3 flex4