Когда я добавляю 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 , построенный и добавленный к сцене.Но на самом деле красный Sprite не виден до тех пор, пока функция onClick () не будет полностью выполнена.
Почему это так и что я могу сделать для красного Sprite должен быть виден немедленно?
Есть ли какая-нибудь (для разработчика невидимая) глобальная paint () или update () функция, то естьне выполняется, пока какой-либо стек не будет полностью выполнен или что-то еще?