第三次播放帧时出错

时间:2011-06-30 19:33:36

标签: actionscript flash frames

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

目前,当用户第二次导航回第1帧(因此第三次播放)时,我的第二个按钮似乎不再存在,并且我收到错误。第1帧上的两个按钮都是通过Flash IDE放置的。为什么我的按钮突然出现,前两次完全没问题?下面是我的第1帧代码。“后退”按钮简单地删除事件侦听器,然后调用gotoAndStop(1)

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)
}

1 个答案:

答案 0 :(得分:1)

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

  • 确保在离开框架之前删除所有侦听器。
  • 转到“空白”框架(仍然具有背景和样式,但没有可互动的组件)即使是5/1000秒也是如此
  • 在第一帧上将变量名称设置为“null”(因此,如果第3帧上的组件名为“foo”,则将foo = null放在第一帧上)
  • var foo:MovieClip放在第1帧上。重复播放您可能正在使用的所有提前命名的MovieClip。