Как удалить мувиклип, который является целью события мыши? - PullRequest
0 голосов
/ 15 июня 2011

В своем классе документов я генерирую несколько фрагментов ролика, а затем размещаю их в своем собственном файле класса.Я хотел бы, чтобы при касании мувиклипов мышью они удалялись, и количество очков увеличивалось на одно очко.Как удалить определенный мувиклип с холста, когда он вызывает событие мыши?Вот что я пробовал до сих пор, ни 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 ]

4 голосов
/ 15 июня 2011

Ваше возвращение слишком высоко, так что ничего ниже не выполняется.

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);
}
0 голосов
/ 15 июня 2011

Вы ищете 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 ++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...