我正在尝试设置一个预加载器来显示主 swf 的加载进度,其中嵌入了所有资产。我找到了bit-101 上描述的工厂类方法,但似乎没有显示加载进度。swf 加载正常,但 bytesLoaded 始终等于 bytesTotal,因此永远不会调用预加载器。
这是我正在使用的工厂类
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");
}
}
}
这会首先正确调用 Factory 类,然后实例化 Main 并调用 init()。但正如我上面提到的,预加载从未显示,因为它似乎正在立即加载所有内容。
这是我嵌入图像的方式问题还是因为我在本地测试?
还有其他人遇到这些问题吗?
谢谢丰富