Actionscript 第三次播放帧时出错

Actionscript 第三次播放帧时出错,actionscript,flash,frames,Actionscript,Flash,Frames,我有一个flash文件,其中第一帧包含两个按钮,其中一个按钮将用户带到第二帧,另一个按钮将用户带到第三帧。在这些帧中的每一帧,都可以通过SimpleButtons操作各种文本字段和变量。第2帧和第3帧都有“后退”按钮,可将它们带回第1帧 当前,当用户第二次导航回第1帧时(因此第三次播放),我的第二个按钮似乎不再存在,我收到一个错误。第1帧上的两个按钮都是通过Flash IDE放置的。为什么我的按钮突然不存在了,而它在前两次做得非常好?下面是我的第1帧代码。“后退”按钮只需删除事件侦听器,然后调用

我有一个flash文件,其中第一帧包含两个按钮,其中一个按钮将用户带到第二帧,另一个按钮将用户带到第三帧。在这些帧中的每一帧,都可以通过SimpleButtons操作各种文本字段和变量。第2帧和第3帧都有“后退”按钮,可将它们带回第1帧

当前,当用户第二次导航回第1帧时(因此第三次播放),我的第二个按钮似乎不再存在,我收到一个错误。第1帧上的两个按钮都是通过Flash IDE放置的。为什么我的按钮突然不存在了,而它在前两次做得非常好?下面是我的第1帧代码。“后退”按钮只需删除事件侦听器,然后调用
gotoAndStop(1)


事实上,我也有过类似的问题。这与垃圾收集有关,垃圾收集一开始并不是Flash中最好的,但IDE的编译器设置让它更加疯狂。你可以尝试一些可能有用的技巧

  • 请确保在离开帧之前删除所有侦听器
  • 进入一个“空白”框架(仍然有背景和样式,但没有可交互的组件)甚至5/1000秒
  • 在第一帧上将变量名设置为“null”(因此,如果第3帧上的组件名为“foo”,则在第一帧上放置
    foo=null
  • var foo:MovieClip
    放在第1帧上。对所有提前命名的可能正在使用的MovieClips重复上述操作
var inited:Boolean;
var cache:SharedObject;
var libsans:Font = new libsansreg();

this.addEventListener(Event.ENTER_FRAME, frameEnter);
stats.addEventListener(MouseEvent.CLICK, statsclicked);
modules.addEventListener(MouseEvent.CLICK, modsclicked);

function initcache():void
{
    this.cache = SharedObject.getLocal("RPG_Shooter")
}

function frameEnter(e:Event):void
{
    if (!inited)
    {
        inited = true
        initcache()
        this.gotoAndStop(1)
    }
}

function statsclicked(e:MouseEvent):void
{
    this.removeEventListener(Event.ENTER_FRAME, frameEnter)
    stats.removeEventListener(MouseEvent.CLICK, statsclicked)
    modules.removeEventListener(MouseEvent.CLICK, modsclicked)
    this.gotoAndStop(2)
}

function modsclicked(e:MouseEvent):void
{
    this.removeEventListener(Event.ENTER_FRAME, frameEnter)
    stats.removeEventListener(MouseEvent.CLICK, statsclicked)
    modules.removeEventListener(MouseEvent.CLICK, modsclicked)
    this.gotoAndStop(3)
}