删除事件侦听器 as3

remove event listener as3

我的测验快完成了。我遇到了一个错误,我终于查明了。但首先我会告诉你一些关于代码的背景信息。

背景

舞台上有4个注册为影片剪辑的按钮组件。这些稍后存储在数组中。当在舞台上单击某个图标时,将通过向所有按钮添加事件侦听器来激活这些按钮。按下按钮时,它会检查它是否是 'correct' 答案并删除事件侦听器。

现在我已经进行了广泛的检查并将问题缩小到以下范围。

代码

此函数将递归地为每个按钮添加按钮侦听器。请注意,变量 'num' 是 1 - 4 之间的固定整数,它在代码中较早生成并用于许多 'if' 情况。

function addButtonListener(num:int):void
{
    for (var obj:Object in _buttons)
    {   
        _buttons[obj].addEventListener(MouseEvent.CLICK, checkans(num));
    }
}

这个函数基本上是相反的,也禁用了按钮

function removeButtonListener(num:int):void
{
    for (var obj:Object in _buttons)
    {
        _buttons[obj].removeEventListener(MouseEvent.CLICK, checkans(num));
        _buttons[obj].enabled = false;
    }
}

现在我通过使用 trace 函数注意到的一件事是代码正确地添加了按钮侦听器但它没有删除它们。

此函数要求删除每个按钮。

function checkans(num:int):Function
{
    return function(e:MouseEvent):void
    {
        if (e.currentTarget.label == xmlNodes)
        {
            points = points + (2 * num);
            scoreBox.text = points.toString();
        }
        else
        {
            trace("Incorrect!");        
        }
            if(myText.parent){
            myText.parent.removeChild(myText)
        }
            closeShowQuestion(num);//closes a previous function
            removeButtonListener(num);//Should I pass this variable into the end function?
            GoFishing.addEventListener(MouseEvent.CLICK, fish);//Starts the process again.
        }
    }

我是不是错误地删除了事件侦听器?

您是否需要查看更多代码才能确定?

提前致谢!

removeEventListener 必须使用在 addEventListener.

中使用的 SAME 函数

您的 checkans 函数总是 returns 新函数,因此添加和删除不会相同。

如果您必须将 num 传递到您的侦听器函数中,请以其他方式进行。使其成为按钮的 属性 或外部存储等