5

我正在用 as3 制作一个小游戏。

游戏包含10个关卡。

当我进入 1 级时,一切都很好。但是当我进入第二级(帧)时,来自第一帧的事件侦听器仍在工作,并收到一条警告说“无法访问空对象引用的对象”。这是因为我删除了第一级的每个对象,并从第 2 阶段添加了对象。

我尝试使用 removeEventListeners,但它不起作用,因为在我删除事件侦听器后,ENTER_FRAME 侦听器又工作了一次。

我尝试过为不同的级别使用不同的框架,但它不起作用。我也尝试对所有 10 帧使用 1 个帧,但我收到很多警告并且 Flash Loader 过载。

我如何切换关卡(后退和前进)?提前致谢。

  addEventListener(Event.ENTER_FRAME, subtracting2);
     arrListeners.pop(); // poping it out of the array because it will be deleted after the count reaches 0
     function subtracting2 (e:Event):void
     {
        count--;
        var FAcoef:Number = count/30; //
        FadeAway.alpha = FAcoef; //                   Some effect like FadeAway
        setChildIndex(FadeAway, numChildren - 1); //
        if(count == 0)
       {
            setChildIndex(FadeAway, 0);
            removeEventListener(Event.ENTER_FRAME, subtracting2);
        }
    }
4

1 回答 1

10

没有删除所有侦听器的内置方法。

当对象被垃圾收集时,您可以使用弱引用来删除侦听器。

object.addEventListener( ......, ......., false, 0, true );

或者您可以自己添加 removeAllListeners 功能,这里有一些信息(查看 Ion 评论)

但是.. 如果您在不再需要时立即删除每个事件侦听器,则您不需要上述任何内容。

如果您有一个具有一个或多个事件侦听器的类,这些侦听器在实例生命周期结束之前都需要,您应该创建一个 destroy() 函数。在该 destroy() 函数中,您将删除所有事件侦听器。

在您的情况下,您可以在进入第二级(帧)之前调用 destroy()。

于 2012-08-27T17:25:53.817 回答