我試圖設置一個預加載器來顯示主SWF的負載進度,其中嵌入了所有的資產。我發現工廠類方法爲described on bit-101,但似乎沒有顯示加載進度。 swf加載正常,但bytesLoaded總是等於bytesTotal,因此preloader永遠不會被調用。主SWF預加載器問題
這是工廠類我使用
package src
{
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.events.Event;
import flash.utils.getDefinitionByName;
/**
* ...
* @author DefaultUser (Tools -> Custom Arguments...)
*/
public class Factory extends MovieClip
{
private var preloader:Preloader;
public function Factory()
{
stop();
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
addEventListener(Event.ENTER_FRAME, enterFrame);
}
public function enterFrame(e:Event):void
{
trace(root.loaderInfo.bytesLoaded, root.loaderInfo.bytesTotal);
if (framesLoaded == totalFrames) {
removeEventListener(Event.ENTER_FRAME, enterFrame);
nextFrame();
init();
}
else {
var percent:Number = root.loaderInfo.bytesLoaded/root.loaderInfo.bytesTotal;
trace(percent);
}
}
private function init():void
{
var mainClass:Class = Class(getDefinitionByName("Main"));
if (mainClass) {
var mainApp:Object = new mainClass();
addChild(mainApp as DisplayObject);
mainApp.init();
}
}
}
}
呼籲enterFrame事件的跟蹤顯示bytesLoaded和BYTESTOTAL是相等的。
這是swf加載時調用的Main類。
package
{
import flash.display.Sprite;
[Frame(factoryClass="src.Factory")]
public class Main extends Sprite
{
[Embed(source="images/FinalImg01.jpg")]
private var Image1:Class;
[Embed(source="images/FinalImg02.jpg")]
private var Image2:Class;
[Embed(source="images/FinalImg03.jpg")]
private var Image3:Class;
public function init():void
{
trace("loaded");
}
}
}
這首先正確地調用工廠類,然後instansiates主要和調用init()。但正如我上面提到的那樣,預加載從未顯示,因爲它似乎正在加載所有的東西。
這是一個問題,我嵌入圖像的方式或因爲我在本地測試?
還有人遇到過這些問題嗎?
感謝 豐富
雅,看來你是在本地測試它,這就是爲什麼它是在一杆得到加載。嘗試使用一些其他沉重的圖像(最好不要在你的系統上,可以從網上下載)。 – bhups 2009-11-03 14:50:01