比方說,我有一些像這樣的代碼在AS3我可以強制執行腳本動作代碼嗎?
for(...)
thing = new Thing(...)
對事物的構造將會導致被渲染到一些影片剪輯的SWF。 如果循環運行10次左右,大多數時候我只會得到在剪輯上顯示的東西的子集。我猜這是閃存在同一時間加載一堆東西的問題。
我已經能夠通過將回調傳遞給Thing構造函數來解決此問題,並且只有在先前的Thing完全加載並回調後才繼續循環。
首先,這是一個已知的問題嗎?或者我以錯誤的方式解決這個問題? 其次,有沒有什麼辦法可以告訴flash /以線性方式運行此代碼而不用回調?在任何地方都會遇到這種煩人的事情。
編輯:
所以我覺得richardolsson是正確的,我們必須做一些錯誤的。爲了重申這個問題,如果我嘗試將多個swfs加載到舞臺上,即使只有兩到三個,但不等待前一個完成加載,我將加載一個不可預知的數字。例如,運行循環10次以上,我可能會得到加載的第二,第五和第十物。其他人似乎以異步方式迷路。 Flash在這些情況下顯示沒有運行時錯誤。所以這裏是我們如何做事的基本想法。
我們有一個基類,我們擴展了大多數加載swfs的類。它看起來像這樣:
public function base(path:string, parent:sprite, callback:function)
{
//this is the child swf path
_path = path;
//parent is the sprtie we want to render the child onto
if(parent != null) doLoad(parent, callback)
}
public function doLoad(parent, callback)
{
var mLoader:Loader = new Loader();
var mRequest:URLRequest = new URLRequest(_path);
//onLoaded is overridden in the child. The override first calls the parent onLoad.
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
mLoader.load(mRequest);
}
//this is called from the load complete from above. This is done before the
//child onloaded is done
protected function onLoaded(loadEvent:Event):void
{
_loadedTarget = loadEvent.currentTarget;
_canvas = _loadedTarget.content;
_parentSprite.addChild(_canvas);
}
現在,我們大多數需要顯示Swf的類都擴展了這個類。他們看起來像這樣
public class child extends base
{
public function child(parent:Sprite, callback)
{
//call base constructor
super("some/path/to/swf", parent, callback);
}
protected override function onLoaded(loadEvent:Event):void
{
super.onLoaded(loadEvent);
....
}
這是基本的方案。如果我嘗試創建一堆'child'的實例,而不等待onLoaded函數完成之前的'child',則隨機實例將不會顯示。我很快就寫了上面的代碼,它不是compy/paste,所以忽略簡單的錯誤。上述方法不起作用有什麼明顯的原因嗎?
您在使用播放器的調試器版本和你肯定沒有運行時錯誤拋出?你試圖達到的目標不應該成爲一個問題。 – 2010-01-04 15:25:19