如何在 AS3 中让 MovieClip 自行移除?
Posted
技术标签:
【中文标题】如何在 AS3 中让 MovieClip 自行移除?【英文标题】:How to make a MovieClip remove itself in AS3? 【发布时间】:2011-03-12 04:59:45 【问题描述】:AS3 中的removeMovieClip()
等价于什么?
显然很多人都有同样的问题: 堆栈溢出:
-
How to completely remove a movieclip in as3
Remove movie clip as3
How to remove childmovieclip and add to new parent movieclip
其他:
-
removeMovieClip(this) in AS3?
Destroy/Delete a Movieclip???
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'
解决方案?
谢谢,
【问题讨论】:
【参考方案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);
发现它是正确和最佳的解决方案。
【讨论】:
以上是关于如何在 AS3 中让 MovieClip 自行移除?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用movieclip作为AS3中另一个可拖动对象的边界?
我如何使用Movieclip名称数组控制as3中的这些剪辑?