通常我的预加载器是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);
}
但它仍然没有绕过预加载器。
如果内容已加载,我是否可以完全跳过预加载器?
答案 0 :(得分:0)
如果我理解正确,那么您的条件不会评估为true,因为在第一帧中getBytesLoaded
和getBytesTotal
方法返回的值即使从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);
您可以使用间隔持续时间(半秒可能过长)。请注意,每次播放头返回到第一帧时都会执行间隔,根据间隔的长度,这可能不是问题。如果这是一个问题,你可以考虑在第一次执行间隔时设置一个布尔标志,这样你就可以避免在后续循环中再次执行它。