Actionscript 从主时间轴的movieclip中删除事件侦听器
因此,我以编程方式将movieclip对象添加到主时间线上。 在这些电影中,我使用了一个定时器事件,所以一旦添加到舞台上,它们就会移动 所以当我的游戏结束时,我想从舞台上移除movieclip对象,我可以这样做,但它会导致错误,因为对象的侦听器仍然在那里 我无法从主时间线访问movieclip对象时间线中的代码以删除侦听器,并且我不知道在删除侦听器时如何从movieclip时间线中删除侦听器 我希望这是有意义的Actionscript 从主时间轴的movieclip中删除事件侦听器,actionscript,Actionscript,因此,我以编程方式将movieclip对象添加到主时间线上。 在这些电影中,我使用了一个定时器事件,所以一旦添加到舞台上,它们就会移动 所以当我的游戏结束时,我想从舞台上移除movieclip对象,我可以这样做,但它会导致错误,因为对象的侦听器仍然在那里 我无法从主时间线访问movieclip对象时间线中的代码以删除侦听器,并且我不知道在删除侦听器时如何从movieclip时间线中删除侦听器 我希望这是有意义的 救命啊 从后台删除DisplayObject时,会有事件接收通知。只需为Event.
救命啊 从后台删除DisplayObject时,会有事件接收通知。只需为Event.ADDED、Event.ADDED_TO_STAGE、Event.REMOVED和Event.REMOVE_FROM_STAGE设置侦听器,即可实现MovieClips的实时循环。添加电影唇后开始填充。移除MovieClips时,移除侦听器、停止计时器等。从后台移除DisplayObject时,会有事件接收通知。只需为Event.ADDED、Event.ADDED_TO_STAGE、Event.REMOVED和Event.REMOVE_FROM_STAGE设置侦听器,即可实现MovieClips的实时循环。添加电影唇后开始填充。删除MovieClips时,请删除侦听器、停止计时器等。您的MovieClips可以侦听Event.removed\u FROM\u STAGE以编程方式删除您先前添加的所有事件侦听器。下面是一些示例代码,演示如何完成
// add this code to an ActionScript class that extends Sprite
// call initClips() in the constructor
private var _clipA:MovieClip;
private var _clipB:MovieClip;
private var _clipACount:int;
private var _clipBCount:int;
private function initClips():void
{
// create 2 movieclips and add some common event listeners
_clipA = new MovieClip();
_clipA.addEventListener(Event.ADDED_TO_STAGE, onClipAddedToStage);
_clipA.addEventListener(Event.REMOVED_FROM_STAGE, onClipRemovedFromStage);
_clipA.addEventListener(Event.ENTER_FRAME, onEnterFrameClipA);
_clipB = new MovieClip();
_clipB.addEventListener(Event.ADDED_TO_STAGE, onClipAddedToStage);
_clipB.addEventListener(Event.REMOVED_FROM_STAGE, onClipRemovedFromStage);
_clipB.addEventListener(Event.ENTER_FRAME, onEnterFrameClipB);
_clipACount = 0;
_clipBCount = 0;
addChild(_clipA);
addChild(_clipB);
}
private function onClipAddedToStage(event:Event):void
{
var clip:MovieClip = event.currentTarget as MovieClip;
if(clip == _clipA)
{
// position movieclip to dummy values
clip.x = 40;
clip.y = 40;
}
else if(clip == _clipB)
{
clip.x = 200;
clip.y = 100;
}
}
private function onClipRemovedFromStage(event:Event):void
{
var clip:MovieClip = event.currentTarget as MovieClip;
// good habit to null check in case "as" casting fails
if(clip != null)
{
// remove event listeners for this movieclip instance
clip.removeEventListener(Event.ADDED_TO_STAGE, onClipAddedToStage);
clip.removeEventListener(Event.REMOVED_FROM_STAGE, onClipRemovedFromStage);
// there is no penalty for trying to remove event listeners that were not added to this object instance
clip.removeEventListener(Event.ENTER_FRAME, onEnterFrameClipA);
clip.removeEventListener(Event.ENTER_FRAME, onEnterFrameClipB);
}
}
private function onEnterFrameClipA(event:Event):void
{
_clipACount++;
trace("onEnterFrame for clipA " + _clipACount);
if(_clipACount > 10)
{
// for demonstration purposes
// remove self after a few frames pass
removeChild(_clipA);
}
}
private function onEnterFrameClipB(event:Event):void
{
_clipBCount++;
trace("onEnterFrame for clipB " + _clipBCount);
if(_clipBCount > 20)
{
removeChild(_clipB);
}
}
您的MovieClips可以侦听Event.REMOVED_FROM_STAGE,以编程方式删除您先前添加的所有事件侦听器。下面是一些示例代码,演示如何完成
// add this code to an ActionScript class that extends Sprite
// call initClips() in the constructor
private var _clipA:MovieClip;
private var _clipB:MovieClip;
private var _clipACount:int;
private var _clipBCount:int;
private function initClips():void
{
// create 2 movieclips and add some common event listeners
_clipA = new MovieClip();
_clipA.addEventListener(Event.ADDED_TO_STAGE, onClipAddedToStage);
_clipA.addEventListener(Event.REMOVED_FROM_STAGE, onClipRemovedFromStage);
_clipA.addEventListener(Event.ENTER_FRAME, onEnterFrameClipA);
_clipB = new MovieClip();
_clipB.addEventListener(Event.ADDED_TO_STAGE, onClipAddedToStage);
_clipB.addEventListener(Event.REMOVED_FROM_STAGE, onClipRemovedFromStage);
_clipB.addEventListener(Event.ENTER_FRAME, onEnterFrameClipB);
_clipACount = 0;
_clipBCount = 0;
addChild(_clipA);
addChild(_clipB);
}
private function onClipAddedToStage(event:Event):void
{
var clip:MovieClip = event.currentTarget as MovieClip;
if(clip == _clipA)
{
// position movieclip to dummy values
clip.x = 40;
clip.y = 40;
}
else if(clip == _clipB)
{
clip.x = 200;
clip.y = 100;
}
}
private function onClipRemovedFromStage(event:Event):void
{
var clip:MovieClip = event.currentTarget as MovieClip;
// good habit to null check in case "as" casting fails
if(clip != null)
{
// remove event listeners for this movieclip instance
clip.removeEventListener(Event.ADDED_TO_STAGE, onClipAddedToStage);
clip.removeEventListener(Event.REMOVED_FROM_STAGE, onClipRemovedFromStage);
// there is no penalty for trying to remove event listeners that were not added to this object instance
clip.removeEventListener(Event.ENTER_FRAME, onEnterFrameClipA);
clip.removeEventListener(Event.ENTER_FRAME, onEnterFrameClipB);
}
}
private function onEnterFrameClipA(event:Event):void
{
_clipACount++;
trace("onEnterFrame for clipA " + _clipACount);
if(_clipACount > 10)
{
// for demonstration purposes
// remove self after a few frames pass
removeChild(_clipA);
}
}
private function onEnterFrameClipB(event:Event):void
{
_clipBCount++;
trace("onEnterFrame for clipB " + _clipBCount);
if(_clipBCount > 20)
{
removeChild(_clipB);
}
}
嗨,谢谢你,我会试一试的,非常感谢!嗨,谢谢你,我会试一试的,非常感谢!