在調用使用外部位圖文件作爲填充的函數addNodeFilled()
之前,我必須使用Loader類在flash播放器中加載位圖文件,並等待加載器完成加載並觸發Event.COMPLETE
並執行相應的事件處理函數onComplete()
。爲了確保這一點,我有一個while循環來等待addNodeFilled()
中的加載完成,但是在運行程序時,程序尤其是循環會無限進行,這意味着在閃存中事件處理程序與主序列同步執行,並且不能執行,直到addNodeFilled()
結束。通常在addNodeFilled()
代碼放在裏面onComplete
事件處理程序,但我無法做到這一點,需要調用addNodeFilled()
每當我想,但檢查負載完成,我該怎麼辦呢?AS3事件架構問題
var stitch:BitmapData = new BitmapData(16, 16);
var loaderStatus:String = "busy";
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.load(new URLRequest("file:///E:/Projects/FlashDevelop/Terracotta/assets/Stripe.jpg"));
addNodeFilled(100, 100);
//function definitions===============================================
function onComplete(event:Event):void
{
stitch = event.target.content.bitmapData;
loaderStatus = "loaded";
} //onComplete
function addNodeFilled(posx:Number, posy:Number):void
{
while(loaderStatus != "loaded")
{
trace("waiting for loader");
}
var grid:Rectangle = new Rectangle(5, 5, 5, 5);
var nodeDecal:Sprite = new Sprite();
nodeDecal.graphics.beginBitmapFill(stitch, null, true, true);
nodeDecal.graphics.drawRoundRectComplex(posx, posy, 80, 16, 0, 0, 4, 4);
nodeDecal.scale9Grid = grid;
addChild(nodeDecal);
} //addNodeFilled
你不能將addNodeFilled()調用移動到onComplete(event:Event)嗎? –
正如我已經說過,將事件處理函數內部的addNodeFilled()放置在通常情況下是如何完成的,但我不能這樣做,因爲需要一次又一次地調用addNodeFilled(),並且當需要使用不同位置參數的新節點時相同的用戶提供了位圖圖像作爲填充。這種被迫將操作函數調用(這裏是addNodeFilled)放在事件處理函數中的情況是有限制的,因爲它只能用相同的參數調用一次,通常保證某事已完成,操作函數依賴於,需要保證一次。 – timmaktu