删除事件监听器as3

时间:2015-03-18 05:37:37

标签: arrays actionscript-3 event-listener

我差不多完成了我的测验。我遇到了一个错误,我最终确定了这个错误。但首先我会告诉你一些关于代码的背景信息。

背景

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

现在我已经做了大量检查,并将问题缩小到以下几个方面。

代码

此函数将递归地向每个按钮添加按钮侦听器。请注意,变量'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.
        }
    }

我是否错误地删除了事件监听器?

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

removeEventListener必须使用addEventListener中使用的SAME功能。

您的checkans函数始终返回一个新函数,因此添加和删除它的功能不同。

如果您必须将num传递给您的侦听器功能,请执行其他操作。使其成为按钮的属性或外部存储等。