Когда внешний SWF-файл достиг кадра X, как его разгрузить? - PullRequest
1 голос
/ 08 сентября 2010

Вот мой код загрузки SWF:

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, а затем выгрузить его. Есть ли способ сделать это без загрузки дополнительных классов?

Ответы [ 2 ]

1 голос
/ 08 сентября 2010

В кадре 244 видеоклипа ball вы можете отправить событие, чтобы сообщить MainTimeline, что кадр 244 достигнут, затем вам нужно будет удалить все ссылки на ball mc и позволить сборке мусора обрабатывать его оттуда.

//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 голосов
/ 08 сентября 2010

Подпишитесь на событие 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);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...