0

通常我的预加载器是 20 帧,看起来像这样:

框架 1 动作脚本:

var amountLoaded:Number = _root.getBytesLoaded()/_root.getBytesTotal();
preloader._width = amountLoaded * 200;
loadText.text = Math.round(amountLoaded * 100) + "%";

if(_root.getBytesLoaded() == _root.getBytesTotal())  {
     gotoAndPlay(21);
}

else {
     gotoAndPlay(1);
}

在第 20 帧,我们显然有:

this.gotoAndPlay(1);

这很好用,但它只是我想要播放我的 Flash 介绍的主页。因此,我在主页以外的每个页面上都使用 FlashVars 来告诉动画它应该跳到哪里。

为此,我将其放置在预加载器之后的第一帧上:

gotoAndPlay(AdFrame);

在除主页之外的每个页面中,我都添加了这个 Flash 变量:

<param name="FlashVars" value="AdFrame=39" />

我的问题: 如果加载了动画,如何完全跳过预加载器?

我失败的尝试: 我尝试移动我的预加载器以从第 2 帧开始,并在第 1 帧更改:

var amountLoaded:Number = _root.getBytesLoaded()/_root.getBytesTotal();
preloader._width = amountLoaded * 200;
loadText.text = Math.round(amountLoaded * 100) + "%";

if(_root.getBytesLoaded() == _root.getBytesTotal())  {
     gotoAndPlay(AdFrame);
}

else {
     gotoAndPlay(2);
}

但它仍然没有绕过预加载器。

如果内容已加载,关于如何完全跳过预加载器的任何想法?

4

1 回答 1

0

如果我理解正确,您的条件不会评估为 true,因为在第一帧上,即使从浏览器缓存加载 SWF , getBytesLoadedand方法返回的值也不相同。getBytesTotal

如果是这种情况,您可以尝试在检查负载状态之前等待。只需将代码移动到第 2 帧并将预加载器动画的开始移动到第 3 帧就足够了。(自从我不得不使用时间线以来已经很长时间了,但我似乎记得等待一帧通常是一个很好的经验法则)。

或者,您可以在执行检查之前在第一帧暂停一小段时间:

stop();

var interval = setInterval(function() {

    clearInterval(interval);

    var amountLoaded:Number = _root.getBytesLoaded()/_root.getBytesTotal();
    preloader._width = amountLoaded * 200;
    loadText.text = Math.round(amountLoaded * 100) + "%";

    if(_root.getBytesLoaded() == _root.getBytesTotal())  {
         gotoAndStop(3);
    }

    else {
         gotoAndStop(2);
    }
}, 500); 

您可以使用间隔持续时间(半秒可能过多)。请注意,每次播放头返回到第一帧时都会执行间隔,根据间隔的长度,这可能不是问题。如果这是一个问题,您可以考虑在第一次执行间隔时设置一个布尔标志,这样您就可以避免在后续循环中再次执行它。

于 2012-05-30T23:18:16.867 回答