随机点击后AS3按钮停止工作

时间:2010-10-29 15:13:59

标签: actionscript-3 button event-handling mouseevent

我有一个用作按钮的movieclip。随机点击后按钮停止工作。换句话说,当鼠标悬停在按钮上时鼠标将成为一只手,但没有点击注册来触发该功能。我甚至点击它40次它会起作用然后突然,砰!,它停止工作。下面是添加btn,监听器,将其动画到屏幕中并添加文本的功能。

function makeButton():void{
addChild(myBtn);
myBtn.mouseChildren=false;
myBtn.buttonMode=true;
myBtn.x=(stage.stageWidth/2)-(myBtn.width/2);
myBtn.y=-300;
myBtn.addEventListener(MouseEvent.MOUSE_DOWN, btnClicked, false, 0, true);
myBtn.btn_text.text="The string goes here";
TweenLite.to(myBtn, 0.5,{x:(stage.stageWidth/2)-(myBtn.width/2),y:(stage.stageHeight/2)-(myBtn.height/2)});
}

然后这是在屏幕外设置按钮动画的功能:

function btnClicked(e:MouseEvent):void{
myBtn.removeEventListener(MouseEvent.MOUSE_DOWN, btnClicked);
TweenLite.to(myBtn, 0.5,{x:(stage.stageWidth/2)-(myBtn.width/2),y:-300});

}

奇怪的是,我添加了一条跟踪(“监听器添加”)到了'makeButton()'之后,在添加事件之后。它每次都会跟踪,即使按钮停止工作也是如此。所以我只能假设添加了监听器没有错误。但那为什么它不起作用?

我很难过。我认为这可能是一个事件传播问题。换句话说,监听器被添加到目标(myBtn)但不知何故它正在捕获或冒泡错误但是.....那为什么它可以工作呢?这么多点击?

事实就在那里。或者也许在这里,您的见解将非常感激。

3 个答案:

答案 0 :(得分:0)

myBtn在哪里创建?我可以在makeButton()的开头看到你正在将它添加到显示列表但是看不到它实际创建的位置?它已经在舞台上了吗?

答案 1 :(得分:0)

在makeButton函数中添加trace语句只会告诉您创建了一个按钮,它不会说明按钮的功能。如果要检查按钮是否对单击作出反应,则需要在单击侦听器中添加trace语句。

根据你的描述,听起来你不断向舞台添加相同的按钮,而不是实际点击相同的按钮。

在停止工作之前,您多久调用一次makeButton函数?这个函数看起来应该只调用一次。至于btnClicked函数,如果你想再次点击按钮,为什么要删除监听器呢?

实际上看起来你应该只在你的函数中有你的补间功能,我的意思是,一旦创建了按钮,你需要一个函数来补间按钮,然后再调用一个函数补间,而不是再次添加按钮按钮回到位。

其他所有内容都不应重复。

答案 2 :(得分:0)

我修复了代码并且问题再次没有发生。问题一定是我每次调用函数时都在运行addChild,这对于显示列表中的MC做了一些奇怪的事情。我没有通过连续多次单击按钮一两分钟来追踪错误,就像我最初发生错误一样。我想我会让睡觉的狗撒谎。

话虽如此,我的代码更清晰,addChild和其他垃圾在初始化函数中运行,只是坐在舞台上方 - 然后在'makeButton'和'btnClicked'函数中调整到位(这是现在恰当地命名为'tweenBtnIn'和'tweenBtnOut')。

再次感谢