当改变第一帧上的场景时,AS2随机动作

时间:2010-05-15 12:18:16

标签: flash actionscript actionscript-2

我有一个包含场景的flash影片:scene1,scene2。 我选择了顺序,以便第一个启动scene1,我被要求添加一个允许flashvars传递的功能,如果fv_change等于1,那么当加载电影时,scene2应该是第一个出现的。

我在某个图层的第一帧中包含了以下代码:

this.onEnterFrame = function() {
    delete this.onEnterFrame;
    if (isset==undefined && _root.fv_change && _root.fv_change==1) {
        isset = true;
        gotoAndStop("scene2",1);    
    }
}

在我的Flash环境中进行测试时,一切正常,当我将其导出为HTML& SWF组合我获得了随机结果,我刷新了几次页面,有些时候出现了scene2,有些时候它仍然与scene1保持一致。

我做错了吗?使用AS2和外部数据(flashvars)更改场景顺序的正确方法是什么。

2 个答案:

答案 0 :(得分:0)

猜测,如果该帧尚未加载,可能无法跳转到场景2 - 尝试使用模拟加载在IDE中进行测试(按ctrl + Enter两次)以确定。如果这是问题,请尝试添加预加载器,直到加载所需的帧(或整个电影)。 (参见示例代码here。)

答案 1 :(得分:0)

通过您的建议和一些googeling找到了解决方案。 看起来电影还没有完成加载所以我所做的就是创建一个名为preloader的场景,它作为第一个场景运行。在第2帧内部(我发现第1帧并不总是最好):

this.onEnterFrame = function(){
    this.stop();
    if(this.getBytesLoaded() >= this.getBytesTotal() && this.getBytesLoaded() > 0){
        if (_root.fv_change && _root.fv_change ==1) {
            _root.gotoAndPlay("frameLabelForScene2Frame1");
        } else {
            _root.gotoAndPlay("frameLabelForScene1Frame1");
        }
        delete this.onEnterFrame;
    }
};

你还记得第一场比赛应该是第一场比赛。如果提供了参数,则应该首先运行scene2。 我认为应该强调的要点是:

  • 使用预加载器上的第二帧
  • 让代码等待加载完成
  • 重要 使用框架标签代替场景名称和gotoAndPlay
  • 使用_root.gotoAndPlay而不仅仅是gotoAndPlay。
  • 为了安全起见,我加入了“其他”部分,预加载器就行了 最终到了scene1,但我想确保它确实

希望这有助于任何人