如何删除作为鼠标事件目标的动画片段?

时间:2011-06-15 01:30:45

标签: flash actionscript-3 actionscript

在我的文档课中,我生成了一堆动画片段,然后将它们放在自己的类文件中。我想要发生的是,当我用鼠标触摸动画片段时,它们会被移除,并且分数会增加一分。当它触发鼠标事件时,如何从画布中删除特定的动画片段?继承了我到目前为止所做的一切,无论是removeChild还是removeMovieClip都工作了:

   public class Pong extends MovieClip
    {
        public var points:int=0;
        public var timer:Timer=new Timer(100);
        public function Pong()
        {
            // constructor code
            timer.addEventListener(TimerEvent.TIMER, tick);
            addEventListener(MouseEvent.MOUSE_OVER,score);
            timer.start();
        }

        public function tick(TimerEvent)
        {
            var clikBloc:clik= new clik();
            addChild(clikBloc);
        }
        public function score(evt:MouseEvent):int
        {
            trace(evt.target);
            points++;
            return (points);
            removeChild(evt.target);
            removeMovieClip(evt.target);
        }

2 个答案:

答案 0 :(得分:4)

你的回报很高,所以没有任何下面的执行。

public function score(evt:MouseEvent):int
{
    trace(evt.target);
    points++;

    removeChild(DisplayObject(evt.target));

    // or just to be on safe side try
    // MovieClip(evt.target).parent.removeChild(evt.target)
    return (points);
}

答案 1 :(得分:0)

您正在寻找removeChild()

我通常会在对象的类中创建一个remove()方法,以便您可以轻松调用thing.remove();

看起来像这样:

public function remove():void
{
    // remove from arrays
    // remove added event listeners

    if(parent) parent.removeChild(this);
}

更好的是,为具有上述remove()方法的可见元素创建一个基类,然后在扩展类中重写它,以便您可以删除特定的侦听器等等。因此,假设上面是基类,这就是覆盖在扩展类中的样子:

override public function remove():void
{
    removeEventListener(MouseEvent.CLICK, _click);
    super.remove();
}

根据评论更新:

您可以从remove()方法调度一个事件,并在文档类中监听它,这样可以增加分数。

public function remove():void
{
    // dispatch removed event
    var evt:Event = new Event("removed");
    dispatchEvent(evt);

    // remove from arrays
    // remove added event listeners

    if(parent) parent.removeChild(this);
}

然后,当您在文档类中创建对象时,请使用:

thing.addEventListener("removed", removed);

从这里你可以(在文档类中):

private function removed(e:Event):void
{
    e.target.removeEventListener("removed", removed);

    points ++;
}