Flash预加载器:没有正确预加载?

时间:2010-02-05 19:23:04

标签: actionscript-3 preloader

预加载器不会像它应该有的那样显示3%,它会在文件完全加载时显示出来。

有人可以帮我解释一下我做错了什么吗?我的代码在第一帧中,它使用了一个矩形对象和一个textfield对象。在我看过这样的代码的其他预加载器中,它使用了一个100帧的动画片段。这有什么不同吗?我有代码更新矩形的宽度,以及更新动态文本框中的文本。

我在第一帧中的整个代码:

import flash.display.MovieClip;
import flash.events.ProgressEvent;

function update(e:ProgressEvent):void {
    //trace(e.bytesLoaded);
    if (loader) {
        loader.text = Math.round(e.bytesLoaded*100/e.bytesTotal).toString() + " %";
    }
    if (bar) {
        bar.width = Math.round(e.bytesLoaded*100/e.bytesTotal)*2;
    }

}
loaderInfo.addEventListener(ProgressEvent.PROGRESS, update);
var loader:TextField = new TextField();
var bar:preloader_bar = new preloader_bar();
addEventListener(Event.ENTER_FRAME, checkFrame);

var loaderTextFormat:TextFormat = new TextFormat("_sans", 16, 0x000000, true);
loaderTextFormat.align = TextFormatAlign.CENTER;
loader.defaultTextFormat = loaderTextFormat;
bar.color = 0x000000;
addChild(bar);
addChild(loader);


// Extra test for IE
var percent:Number = Math.floor( (this.loaderInfo.bytesLoaded*100)/this.loaderInfo.bytesTotal );
if (percent == 100) {
    nextFrame();
}
stop();


if (loader) {
    loader.x = (stage.stageWidth - loader.width) / 2;
    loader.y = stage.stageHeight / 2;
}
if (bar) {
    bar.x = (stage.stageWidth - 200) / 2;
    bar.y = (stage.stageHeight - bar.height) / 2;
}

function checkFrame(e:Event):void {
    if (currentFrame == totalFrames) {
        removeEventListener(Event.ENTER_FRAME, checkFrame);
        startup();
    }
}
function startup():void {
    // hide loader
    stop();
    loaderInfo.removeEventListener(ProgressEvent.PROGRESS, update);
    var mainClass:Class = Main as Class;
    addChild(new mainClass() as DisplayObject);
}

它真的应该出现,是否有一些我需要改变的奇特出口选择?我尝试使用带宽分析器,它只显示100%标记后的任何内容。

编辑:progress_bar是为动作脚本导出的动画片段。

1 个答案:

答案 0 :(得分:1)

您的问题似乎与this非常相似。

简短版:你有一个框架吗? 如果是这样,请尽可能多地在第2帧移动 将其设置为actionscript的Export Frame。 一旦您的第一帧尺寸较小,您就可以轻松看到预加载器。

HTH, 乔治