如何让一个MovieClip在AS3中删除自己?

时间:2010-07-06 08:26:56

标签: flash-cs4 actionscript-3 movieclip

AS3中的removeMovieClip()相当于什么?

显然很多人都有同样的问题:
StackOverflow:

  1. How to completely remove a movieclip in as3
  2. Remove movie clip as3
  3. How to remove childmovieclip and add to new parent movieclip
  4. 其他:

    1. removeMovieClip(this) in AS3?
    2. Destroy/Delete a Movieclip???
    3. Remove movie clip
    4. 但对我来说,他们的解决方案似乎都不起作用:

      我使用 AS3 处理 flash CS4

      我有一个非常简单的电影,只有一个名为点击的按钮。按下按钮后,将创建一个新的硬币实例:

      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 个答案:

答案 0 :(得分:11)

this.parent.removeChild(this);

这个应该工作;这就是我用的东西。我切换到AS3时遇到的一个问题是,有时候它不能作为孩子正确添加,所以你可能想检查一下。如果你还没有将它放在顶部,你还必须导入flash.display:

import flash.display.*

在删除之前,您还应该删除它上面的事件侦听器。

答案 1 :(得分:0)

如果您的动画在第20帧结束。

注意:使用19因为闪存计数帧从零(0)类似于数组索引。

class animatedCloud
{

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

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

答案 2 :(得分:0)

始终确保自动删除动画片段可以收集垃圾。 这个解决方案从加载的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;
});

答案 3 :(得分:0)

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;
}

答案 4 :(得分:-1)

我在MovieClip末尾的一个额外的空白关键帧中使用它应该自行删除:

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

发现它是最合适的解决方案。