Как заставить MovieClip удалить себя в AS3? - PullRequest
5 голосов
/ 06 июля 2010

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

Очевидно, у многих один и тот же вопрос:
Переполнение стека:

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

Другие:

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

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

Я работаю на вспышке CS4 с AS3 :

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

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'       

Решения

Спасибо

Ответы [ 5 ]

11 голосов
/ 07 июля 2010
this.parent.removeChild(this);

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

import flash.display.*

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

0 голосов
/ 12 ноября 2016

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

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

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

0 голосов
/ 05 ноября 2013
public static function removeDisplayObject(displayObject:DisplayObject):void {
    /* normal code
    if(displayObject && displayObject.parent){
        displayObject.parent.removeChild(displayObject);
    }
     */
    displayObject ? displayObject.parent ? displayObject.parent.removeChild(displayObject) : null : null;
}
0 голосов
/ 20 апреля 2013

Всегда следите за тем, чтобы эти самовывозные видеоклипы могли собираться мусором.Это решение стерло все мои экземпляры с символа библиотеки загруженного 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;
});
0 голосов
/ 22 октября 2012

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

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

class animatedCloud
{

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

    private function frame20(){
        parent.removeChild(this);
    }
}
...