电影剪辑通过显示对象无法正常工作

时间:2014-06-14 05:49:06

标签: arrays actionscript-3 flashdevelop flash-cs6 displayobject

大家好,所以我有一个名为popEffect的影片剪辑,我希望在鼠标点击的当前bubbles上显示。现在,每当我点击一个Bubble一切正常时,它们就会从舞台上删除,但我遇到的问题是popEffect没有定位到被点击的当前bubbles。相反,它们位于显示对象数组中屏幕上显示的不同气泡。

以下是我完成所有设置的方法:

private function addBubbles(e:TimerEvent):void 
    {

        bubbles = new mcBubbles();
        stage.addChild(bubbles);
        aBubbleArray.push(bubbles);
        bubbles.addEventListener(MouseEvent.CLICK, bubblesBeingClicked);
    }

然后是BubblesBeingClicked函数:

private function bubblesBeingClicked(e:MouseEvent):void 
    {
         var BubblePop:DisplayObject = e.target as DisplayObject; // HERE is your clicked square
         var i:int = aBubbleArray.indexOf(BubblePop); // and HERE is your index in the array

         if (i < 0) 
         {

            // the MC is out of the array
               //trace("Pop Clicked");
               onBubbleIsClicked(BubblePop);
               aBubbleArray.splice(i, 1);
               BubblePop.parent.removeChild(BubblePop);
               //Remove Listeners!!!
               BubblePop.removeEventListener(MouseEvent.MOUSE_DOWN, onBubbleIsClicked);
               // Null
               BubblePop = null;



         }

    }

最后我的onBubbleIsClicked函数,其中popEffect位于:

private function onBubbleIsClicked(bubblePop:DisplayObject):void 
    {
        nScore++;
        updateHighScore();



         //Pop Effect
         popEffect = new mcBubblePop();
         stage.addChild(popEffect);
         popEffect.x = bubbles.x;
         popEffect.y = bubbles.y;
       }

任何人都可以看到为什么popEffect不会对当前正在弹出的泡泡定位?它的表现非常奇怪。

1 个答案:

答案 0 :(得分:1)

原因是:

popEffect.x = bubbles.x;
popEffect.y = bubbles.y;

据我所知,bubbles是班级中的成员变量(您在addBubbles函数中使用它。在onBubbleIsClicked内,您提供bubblePop但是不要使用它。你正在使用bubbles,这实际上是你在tick函数中创建的最后一个实例!

因此,每次创建popEffect时,您实际上都会将xy分配给最新创建的bubblePop

有人建议

  • 不要经常使用成员变量。它们用于 WHEN ,您需要在函数之间使用变量。在您的情况下,bubbles是一个在创建函数中仅使用 的变量。你甚至把它们放入一个阵列!并且因为每次创建实例时都使用新的覆盖它,所以成员变量只保存最后一个。这真的需要吗?与popEffect相同,是否有其他人使用它,因为它只是最后一个?正如你所看到的那样,这些事情会产生错误。

  • 我真的不明白这意味着什么:if (i < 0)。您搜索您单击的对象是否不在数组中?好吧,如果不是(怎么样?!),那么aBubbleArray.splice(i, 1);的含义是什么?自i < 0以来,您实际上拼接了负值,因此您拼接了一些其他元素!按逻辑计划你想做的事情,然后做实际的代码。如果对象不在数组中,那么为什么要从数组中删除任何内容?

  • 更好地开始格式化代码。阅读有关驼峰案例和变量范围的内容。

  • 尝试更好地管理您的逻辑。例如,这是非常尴尬的:BubblePop.parent.removeChild(BubblePop);,只要您使用stage.addChild(bubbles);添加它即可。那么使用stage.removeChild(child);是不是更简单?编程中有一些规则(特别是在Flash中),比如“添加它应该删除它的内容”。这样可以保证您将来的安全。

祝你好运!