有没有更好的方法来修复我的AS2预加载器?

时间:2014-05-23 14:48:19

标签: optimization actionscript-2 preloading

我在场景1中有一个带预加载器的游戏,时间线上有以下代码。

stop();
loadingBar._xscale = 1;
var loadingCall:Number = setInterval(preloadSite, 50);

function preloadSite():Void {
var siteLoaded:Number = _root.getBytesLoaded();
var siteTotal:Number = _root.getBytesTotal();
var percentage:Number = Math.round(siteLoaded/siteTotal*100);
loadingBar._xscale = percentage;

  bytesDisplay.text = percentage + "%";
  if (siteLoaded >= siteTotal) {
    clearInterval(loadingCall);
    gotoAndPlay("StartMenu", 1);
  }
}

当没有链接到第1帧的音乐文件时,代码工作正常。如果链接了音乐文件,则在预加载器出现之前所有内容都会加载。

我发现这个关于预加载器的webpage很棒,它讲的是链接问题,并建议我在预加载器之后将所有大文件放在第2帧上,然后跳过它们。我按照建议将大文件放在第2帧上,预加载器再次工作。

我的问题是,有没有更好的方法来做到这一点。这个解决方案看起来像是一个黑客。

1 个答案:

答案 0 :(得分:1)

我能想到的唯一更好的选择是不将MP3文件存储在Flash文件中,而是将其加载到预加载器中,并附上Flash文件的内容。这是因为您将MP3文件存储在其他地方(如服务器上)。

stop();

loadingBar._xscale = 1;

var sound:Sound = new Sound();
sound.loadSound("http://www.example.com/sound.mp3", false);

var loadingCall:Number = setInterval(preloadSite, 50);

function preloadSite():Void {   
    var siteLoaded:Number = _root.getBytesLoaded()+sound.getBytesLoaded();
    var siteTotal:Number = _root.getBytesTotal()+sound.getBytesTotal();
    var percentage:Number = Math.round(siteLoaded / siteTotal * 100);
    loadingBar._xscale = percentage;

    bytesDisplay.text = percentage + "%";
    if (siteLoaded >= siteTotal) {
        clearInterval(loadingCall);
        gotoAndPlay("StartMenu", 1);
        sound.start();
    }
}