2010-09-08 68 views
1

这里是我的SWF加载代码:当外部SWF到达X帧时,我该如何卸载它?

function loadBall(e:MouseEvent):void{ 
var mLoader:Loader = new Loader(); 
var mRequest:URLRequest = new URLRequest("ball.swf"); 
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
mLoader.load(mRequest); 
} 

function onCompleteHandler(loadEvent:Event){ 
    currentMovie = MovieClip(loadEvent.currentTarget.content) 
    addChild(currentMovie); 
    trace(loadEvent); 
} 
function onProgressHandler(mProgress:ProgressEvent){ 
var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal; 
trace(percent); 
} 

我想检测是否ball.swf已达到244架,然后卸载它。有没有办法做到这一点,而无需下载额外的类?

回答

1

在舞会影片剪辑的第244帧中,您可以派发一个事件来通知MainTimeline已经到达了帧244,那么您将需要删除对该球的所有引用,并让垃圾收集从那里处理它。

 
//in the ball movie clip, on frame 244 

this.dispatchEvent(new Event("End of Movie")); 

//in the main timeline , after loading the swf 

function onCompleteHandler(event:Event):void 
{ 
    //keep the ball movie clip as a local variable 
    var ball:MovieClip = event.target.loader.content as MovieClip; 
    ball.name = "ball"; 
    ball.addEventListener("End of Movie" , remove , false , 0 , true); 
    addChild(ball); 
} 

function remove(event:Event):void 
{ 
    event.target.removeEventListener('End of Movie' , remove); 

    //now you can retrieve the ball mc by its name and remove it from the stage 
    this.removeChild(this.getChildByName('ball')); 
} 
0

订阅阶段的Event.ENTER_FRAME事件,并检查您创建的影片剪辑的currentFrame财产。

private static final BALL_END_FRAME : int = 244; 

private var _ball : MovieClip; 

function onCompleteHandler(event:Event):void 
{ 
    _ball = event.target.loader.content as MovieClip; 
    addChild(_ball); 

    stage.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler); 
} 

function onEnterFrameHandler(event:Event):void 
{ 
    if (_ball.currentFrame == BALL_END_FRAME) 
    { 
     removeChild(_ball); 
     stage.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler); 
    } 
}