【问题标题】:How to make a MovieClip remove itself in AS3?如何在 AS3 中让 MovieClip 自行移除?
【发布时间】:2011-03-12 04:59:45
【问题描述】:

AS3 中的removeMovieClip() 等价于什么?

显然很多人都有同样的问题:
堆栈溢出:

  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

其他:

  1. removeMovieClip(this) in AS3?
  2. Destroy/Delete a Movieclip???
  3. Remove movie clip

但对我来说,他们的解决方案似乎都不起作用:

我正在使用 AS3 开发 flash CS4

我有一个非常简单的电影,只有一个名为 click 的按钮。按下按钮后,会创建一个新的 coin 实例:

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'       

解决方案?

谢谢,

【问题讨论】:

    标签: flash-cs4 actionscript-3 movieclip


    【解决方案1】:
    this.parent.removeChild(this);
    

    这个应该可以工作;这是我用的。我在切换到 AS3 时遇到的一个问题是,有时它不会被添加为子权限,因此您可能需要检查一下。如果您还没有,您还必须通过将它放在顶部来导入 flash.display:

    import flash.display.*
    

    你还应该在移除它之前移除它上面的事件监听器。

    【讨论】:

    • 谢谢,这是关于事件监听器的。现在它完美地工作了。顺便说一句,“import flash.display.*”是为了什么?
    • 它可以让你使用 flash 自带的 display 包中的类中的函数。顺便说一句,如果有人解决了您的问题,您应该接受该答案。 ;)
    【解决方案2】:

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

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

    class animatedCloud
    {
    
        public function animatedCloud(){
            addFrameScript(19, frame20);
        }
    
        private function frame20(){
            parent.removeChild(this);
        }
    }
    

    【讨论】:

      【解决方案3】:

      始终确保那些自动删除的影片剪辑可以被垃圾收集。 此解决方案从已加载的 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;
      });
      

      【讨论】:

        【解决方案4】:
        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;
        }
        

        【讨论】:

          【解决方案5】:

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

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

          发现它是正确和最佳的解决方案。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-02-23
            • 2014-03-19
            • 1970-01-01
            • 1970-01-01
            • 2013-11-25
            • 1970-01-01
            • 2010-12-11
            相关资源
            最近更新 更多