【问题标题】:AS3 Button stops working after random amount of clickAS3 按钮在随机点击后停止工作
【发布时间】:2010-10-29 15:13:59
【问题描述】:

我有一个用作按钮的影片剪辑。随机点击后,按钮停止工作。换句话说,当鼠标悬停在按钮上时,鼠标将变成一只手,但没有注册点击以触发该功能。我什至点击了它 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),但不知何故它捕获或冒泡是错误的,但是......那为什么它会起作用呢?还有这么多点击?

真相就在那里。或者也许在这里,您的见解将不胜感激。

【问题讨论】:

    标签: actionscript-3 button event-handling mouseevent


    【解决方案1】:

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

    【讨论】:

    • 实例化了 var myBtn:MovieClip = new MyBtn();在类中,或者类似,无论它被称为什么,在类中的函数之外。 Like: package{ public class myClass extends MovieClip(){ // 这里实例化了 public function myClass():void{ } } }
    【解决方案2】:

    在 makeButton 函数中添加跟踪语句只会告诉您创建了一个按钮,它不会说明您的按钮的功能。如果你想检查你的按钮是否对点击做出反应,你需要在点击监听器中添加你的跟踪语句。

    根据您的描述,听起来您一直在向舞台添加相同的按钮,而不是实际单击相同的按钮。

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

    实际上,您的函数中似乎应该只具有补间功能,我的意思是,一旦创建按钮,您需要一个函数来补间按钮,然后无需再次添加按钮,只需调用一个函数来补间按钮放回原位。

    其余的不要重复。

    【讨论】:

    • 好点,我将在 makeButton 函数之外(在初始化时)添加Child(myBtn),并将它放在舞台之外(y:-300)。因此 makeButton/btnClicked 函数只会补间按钮。没错,我的代码有点草率。
    【解决方案3】:

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

    话虽如此,我的代码更加简洁,addChild 和其他垃圾在初始化函数中运行并且就在舞台上方 - 然后在“makeButton”和“btnClicked”函数(它们是现在恰当地命名为“tweenBtnIn”和“tweenBtnOut”)。

    再次感谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-09
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 2015-12-10
      • 1970-01-01
      相关资源
      最近更新 更多