Actionscript 3 如果后退,则放置在时间线上的符号将变得未定义

Actionscript 3 如果后退,则放置在时间线上的符号将变得未定义,actionscript-3,flash,Actionscript 3,Flash,我正在使用.swf时间线中的帧作为flash应用程序中的页面。用户可以通过单击按钮进入下一页,进入下一帧。同样,也可以导航到上一帧/页面 大部分内容放在后台(即通过将库符号的实例拖到后台创建),但这些实例的属性(如.visible)可能会通过actionscript更改。此外,一些对象是从外部闪存文件加载的,并使用addChild/addChildAt以编程方式显示 问题是,如果我在第N+1帧上,并且有一个对象以编程方式显示在舞台上(即使用addChild,而不是通过将其放置在舞台上),并导航到

我正在使用.swf时间线中的帧作为flash应用程序中的页面。用户可以通过单击按钮进入下一页,进入下一帧。同样,也可以导航到上一帧/页面

大部分内容放在后台(即通过将库符号的实例拖到后台创建),但这些实例的属性(如.visible)可能会通过actionscript更改。此外,一些对象是从外部闪存文件加载的,并使用addChild/addChildAt以编程方式显示

问题是,如果我在第N+1帧上,并且有一个对象以编程方式显示在舞台上(即使用addChild,而不是通过将其放置在舞台上),并导航到第N帧,其中有一个对象放置在舞台上(即从库中拖动), 然后,该对象的实例为undefined/null,如果我试图设置其属性(如.visible),则会抛出一个错误

如果移动到下一帧,则不会发生错误,仅当移动到上一帧时才会发生错误。因此,我假设在返回一帧时没有调用某种初始化

我还认为对象不会“生存”到下一个时间段,也就是说,由于范围的原因,它们的值会丢失并重新初始化,但是如果舞台上没有动态创建的对象,我可以很好地来回导航


有没有办法确保在舞台上创建的对象不会在导航回前一帧时消失?

我不确定你的问题是否正确,但as3不会在你找到某个对象后立即在时间线上实例化元素,而是在该帧之后。 也就是说,你不能

this.gotoAndPlay(10)
this.elementOnTimelineFrame10.DoSomething()

没有错误。

我不确定你的问题是否正确,但as3不会在你得到某个东西后立即实例化时间线上的元素,而是稍后再实例化该帧。 也就是说,你不能

this.gotoAndPlay(10)
this.elementOnTimelineFrame10.DoSomething()

没有错误。

第一个也是更有用的部分答案是:时间轴关键帧和脚本可以提供有关显示对象的冲突信息—它们是否应该存在,应该在哪里,等等。例如,通过在其框架中播放添加项目,然后使用脚本将其删除,然后再次在其框架中播放。当这种情况发生时,Flash并没有明确正确的操作,所以它往往是不可预测的。我相信通常发生的情况是,一旦你通过脚本摆弄一个给定的对象,它被认为不再关注时间线——但你的里程会有所不同

话虽如此,当你向后玩的时候,事情不同的原因是答案的第二部分,也是更神秘的部分。在时间轴上向前和向后搜索时,内部Flash的功能不同。Flash在内部将关键帧视为要在前进方向上应用的更改,因此在向前播放时,它会按顺序应用这些更改。然而,当你向后移动时,从第N+X帧到第N帧,它不会扫描中间的X帧来反转这些变化-它会跳回到第1帧,然后快速向前移动到第N帧。通常情况下,这相当于同一件事,你不必担心,但是,当你进入紧张的领域,剧本和时间线对舞台上应该出现什么有不同的想法时,你很容易看到事情的表现会因你跳的方式不同而有所不同(就像你现在这样)


超短版本是,为了让事情可以预期地工作,请尝试确保以相同的方式添加、更新和删除任何给定的对象——要么全部通过脚本,要么全部通过时间线。当这似乎不可能时,调整内容结构-通常,最好的解决方案是将对象更改为两个嵌套对象,这样,您想用脚本执行的操作比您想用时间线执行的操作高一级或低一级。

第一个,更有用,部分答案是这样的:时间轴关键帧和脚本可以提供有关显示对象的冲突信息—它们是否应该存在,应该在哪里,等等。例如,通过在其框架中播放添加项目,然后使用脚本将其删除,然后再次在其框架中播放。当这种情况发生时,Flash并没有明确正确的操作,所以它往往是不可预测的。我相信通常发生的情况是,一旦你通过脚本摆弄一个给定的对象,它被认为不再关注时间线——但你的里程会有所不同

话虽如此,当你向后玩的时候,事情不同的原因是答案的第二部分,也是更神秘的部分。在时间轴上向前和向后搜索时,内部Flash的功能不同。Flash在内部将关键帧视为要在前进方向上应用的更改,因此在向前播放时,它会按顺序应用这些更改。然而,当你向后移动时,从第N+X帧到第N帧,它不会扫描中间的X帧来反转这些变化-它会跳回到第1帧,然后快速向前移动到第N帧。通常情况下,这相当于同一件事,你不必担心,但是,当你进入紧张的领域,剧本和时间线对舞台上应该出现什么有不同的想法时,你很容易看到事情的表现会因你跳的方式不同而有所不同(就像你现在这样)


超短版本是,为了让事情可以预期地工作,请尝试确保以相同的方式添加、更新和删除任何给定的对象——要么全部通过脚本,要么全部通过时间线。当这看起来不可能的时候,摆弄一下你的内容结构——通常,最好的解决方案是将你的对象改变成两个嵌套的对象,这样你想用脚本做的事情比你想用时间线做的事情高一级或低一级。

我记得过去用这段代码来工作