如果加载内容,Flash AS2预加载器仍会运行

时间:2012-05-28 19:15:34

标签: actionscript-3 flash actionscript actionscript-2

通常我的预加载器是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帧开始,在第一帧,改变了:

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);
}

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

如果内容已加载,我是否可以完全跳过预加载器?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您的条件不会评估为true,因为在第一帧中getBytesLoadedgetBytesTotal方法返回的值即使从SWF加载时也不一样浏览器缓存。

如果是这种情况,您可以在检查加载状态之前尝试等待。只需将代码移动到第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); 

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