2010-05-15 25 views
1

我有一个包含场景的场景:scene1,scene2。 我已经选择了这个命令,以便scene1首先启动,我被要求添加一个允许flashvars传递的功能,如果fv_change等于1,那么scene2应该是在电影加载时第一个出现的功能。AS2在第一帧更改场景时随机动作

我已经包含在某些层的SCENE1第一帧以下代码:

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

在我的闪存环境中的所有测试时工作得很好,当我把它导出为HTML & SWF组合我得到随机的结果,我刷新了几次页面,有些时候scene2出现了,有些时候它还停留在scene1。

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

回答

0

推测,如果该框架尚未加载,可能无法跳转到场景2 - 尝试在IDE中使用模拟加载进行测试(按Ctrl + Enter两次)以确保。如果这是问题,请尝试添加预加载器,直到您想要的帧(或整个电影)被加载。 (请参阅示例代码here。)

0

找到了解决方案,感谢您的建议和一些问题。 看来电影还没有完成加载,所以我所做的就是创建一个名为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; 
    } 
}; 

当你记得scene1应该先运行。如果提供了参数scene2应该先运行。 我觉得应该强调的要点是:

  • 使用第二个框架上的预加载
  • 让代码等待装载完成
  • 重要使用帧标签,而不是场景名称与gotoAndPlay
  • 使用_root.gotoAndPlay,而不只是gotoAndPlay。
  • 只是为了安全起见我列入“其他”部分,预加载会去 最终SCENE1但我想,以确保它确实

希望这有助于任何人