Как заставить MovieClip удалиться в AS3?

Что эквивалентно removeMovieClip() в AS3?

По-видимому, у многих возникает один и тот же вопрос:
StackOverflow:

  1. Как полностью удалить видеоклип в as3
  2. Удалить фрагмент ролика as3
  3. Как удалить дочерний видеоклип и добавить его в новый родительский видеоклип

Другие:

  1. removeMovieClip (this) в AS3?
  2. Уничтожить / удалить видеоклип ???
  3. Удалить фрагмент ролика

Но для меня ни одно из их решений не работает:

Я работаю над flash CS4 с AS3:

У меня есть очень простой фильм с одной кнопкой под названием щелчок. При нажатии кнопки создается новый экземпляр монеты:

this.click.addEventListener(MouseEvent.CLICK,justclick);
function justclick(e:MouseEvent){
    var money=new coin
    this.addChild(money)
    money.x=e.stageX
    money.y=e.stageY
}

Возможно, это не лучший код, но он отлично работает. Теперь монета MovieClip должна показывать небольшую анимацию и удаляться. В старом добром AS2 я бы добавил:

this.removeMovieClip()

в последнем кадре анимации. Но этого нет в AS3.
Я безуспешно пробовал:

this.parent.removeChild(this) // 'Cannot access a property or method of nullobject reference'...     

this.removeMovieClip() // 'removeMovieClip is not a function'      

removeMovieClip(this) //'call to possibly undefined method removeMovieClip'       

unloadMovie(this)//'call to possibly undefined method removeMovieClip'       

Решения?

Спасибо,


person Skuge    schedule 06.07.2010    source источник


Ответы (4)


this.parent.removeChild(this);

Этот должен работать; это то, что я использую. Одна проблема, с которой я столкнулся, когда я переключился на AS3, заключалась в том, что иногда он не добавлялся как дочерний, так что вы можете проверить это. Вам также необходимо импортировать flash.display, поместив его вверху, если вы еще этого не сделали:

import flash.display.*

Вы также должны удалить на нем прослушиватель событий, прежде чем удалять его.

person Ullallulloo    schedule 07.07.2010
comment
Спасибо, это было о слушателях событий. Теперь работает отлично. Кстати, для чего нужен «import flash.display. *»? - person Skuge; 07.07.2010
comment
Он позволяет использовать функции из классов внутри пакета отображения, поставляемого с flash. Кстати, если кто-то решит вашу проблему, вы должны принять этот ответ. ;) - person Ullallulloo; 07.07.2010

Если ваша анимация заканчивается на 20 кадре.

примечание: используется 19, потому что флеш-память отсчитывает кадры от нуля (0) аналогично индексу массива.

class animatedCloud
{

    public function animatedCloud(){
        addFrameScript(19, frame20);
    }

    private function frame20(){
        parent.removeChild(this);
    }
}
person justnajm    schedule 22.10.2012

Всегда следите за тем, чтобы эти самоудаленные фрагменты роликов могли быть удалены сборщиком мусора. Это решение стерло все мои экземпляры из символа загруженной библиотеки swf:

var mc:MovieClip = new definition() as MovieClip;
addChild(mc);

mc.x = 1000 * Math.random();
mc.y = 1000 * Math.random();

mc.addFrameScript(mc.totalFrames - 1, function onLastFrame():void
{
    mc.stop();
    mc.parent.removeChild(mc);
    mc = null;
});
person layouterlimits    schedule 20.04.2013

Я использую в дополнительном пустом ключевом кадре в конце MovieClip, который должен сам удалиться:

stop();
MovieClip(parent).removeChild(this);

Нашел, что это правильное и лучшее решение.

person Avi    schedule 12.11.2016