我差不多完成了我的测验。我遇到了一个错误,我最终确定了这个错误。但首先我会告诉你一些关于代码的背景信息。
背景
在舞台上,有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.
}
}
我是否错误地删除了事件监听器?
您需要查看更多代码才能确定吗?
提前致谢!
答案 0 :(得分:0)
removeEventListener
必须使用addEventListener
中使用的SAME功能。
您的checkans
函数始终返回一个新函数,因此添加和删除它的功能不同。
如果您必须将num
传递给您的侦听器功能,请执行其他操作。使其成为按钮的属性或外部存储等。