使用ROLL_OVER时AS3中的循环问题

时间:2011-06-06 21:58:15

标签: actionscript-3 flash-cs5

所以基本上我试图制作一个横幅,用一个按钮在ROLL_OVER和ROLL_OUT上添加和删除一个影片剪辑。我创建了影片剪辑和按钮,如果我只使用ROLL_OVER,它可以正常工作。一旦我为ROLL_OUT添加了一个eventListener,它就像疯了一样循环这些函数,并且影片剪辑会一直闪烁。我知道我错过了一些简单的事情,但我无法理解什么。这是代码:

       var MySmiles:smilesEvery=new smilesEvery();

       buttonSmiles_btn.addEventListener(MouseEvent.ROLL_OVER, smiles, false, 0, true);
       function smiles(myevent:MouseEvent):void {
         this.addChild(MySmiles);
       };
       buttonSmiles_btn.addEventListener(MouseEvent.ROLL_OUT, smilesOUT, false, 0, true);
       function smilesOUT(myevent:MouseEvent):void {
        this.removeChild(MySmiles);
       };

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

删除侦听器可能有所帮助:

var MySmiles:smilesEvery = new smilesEvery();

   buttonSmiles_btn.addEventListener(MouseEvent.ROLL_OVER, smiles, false, 0, true);

   buttonSmiles_btn.mouseChildren = false //to be shure, that one of the childs interfire with mouse events

   function smiles(myevent:MouseEvent):void {
     this.addChild(MySmiles);
     buttonSmiles_btn.addEventListener(MouseEvent.ROLL_OUT, smilesOUT, false, 0, true);
   };
   function smilesOUT(myevent:MouseEvent):void {
    buttonSmiles_btn.removeEventListener(MouseEvent.ROLL_OUT, smilesOUT, false,0,true);
    this.removeChild(MySmiles);
   };

答案 1 :(得分:0)

我的猜测:滚动时你会显示一个与你的按钮重叠的剪辑。 因此,您可以立即按下按钮。 这反过来会导致您的按钮再次接收翻滚。 这会导致递归堆栈溢出。 :)

如果上述情况属实,只需在MySmiles上禁用鼠标即可。 mouseChidren和mouseEnabled。