Как использовать loaderInfo? - PullRequest
0 голосов
/ 21 июля 2011

Я хочу создать полосу загрузки, но сначала мне нужно иметь информацию о загрузке для каждого кадра ввода.Вот как я это делаю, но, похоже, не работает.Не могли бы вы научить меня, как это сделать?

 var mapLoader : Loader = new Loader( );
     var mapLoaderInfoLoad:Number;
     var mapLoaderInfoTotal:Number;

public function engine() 
{

        addEventListener( Event.ENTER_FRAME, onEnterFrame,false,0,true );

        mapLoader.load( new URLRequest( "Mapcontrol.swf" ) );
        mapLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler );

}
private function onEnterFrame( evt:Event ):void
    {mapLoaderInfoLoad = mapLoader.loaderInfo.bytesLoaded;
        mapLoaderInfoTotal = mapLoader.loaderInfo.bytesTotal;
        trace(mapLoaderInfoLoad);
        trace(mapLoaderInfoTotal);}

public function completeHandler ( eventOBJ : Event ) : void
     {
         stage.addChild( mapLoader.content );
     }

Ответы [ 3 ]

4 голосов
/ 21 июля 2011

вы можете просто использовать событие PROGRESS:

mapLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
// ...
private function progressHandler(event:ProgressEvent):void
{
  trace("Downloaded " + event.bytesLoaded + " out of " + event.bytesTotal + " bytes");
}
1 голос
/ 21 июля 2011
stop();
var mapLoader : Loader = new Loader( );
function engine():void {    

    mapLoader.load( new URLRequest( "index.swf" ) );
    mapLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler );
    mapLoader.contentLoaderInfo.addEventListener( ProgressEvent.PROGRESS, onProgressAction);    
}
function onProgressAction (e:ProgressEvent):void 
{
    var loaded:Number = e.target.bytesLoaded;
    var total:Number = e.target.bytesTotal;
    var percent:Number(loaded/total) * 100;
}    
function completeHandler( eventOBJ : Event ):void    {
    stage.addChild( eventOBJ.target.content );
    mapLoader.contentLoaderInfo.removeEventListener( ProgressEvent.PROGRESS, onProgressAction);  
}
engine();

Это будет работать

1 голос
/ 21 июля 2011

BytesTotal из loaderInfo загрузчика будет возвращать 0, пока загрузчик не запустит свое первое progress событие. Есть ли причина, по которой вы хотите использовать enterFrame таким образом, а не событие progress?

Пример простого события прогресса:

var mapLoader : Loader = new Loader();
var mapLoaderInfoLoad:Number;
var mapLoaderInfoTotal:Number;

public function engine() 
{
    mapLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler );
    mapLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    mapLoader.load( new URLRequest( "Mapcontrol.swf" ) );  
}

private function progressHandler(evt:ProgressEvent):void
{
    mapLoaderInfoLoad = evt.bytesLoaded;
    mapLoaderInfoTotal = evt.bytesTotal;
    trace(mapLoaderInfoLoad);
    trace(mapLoaderInfoTotal);
}

Введите кадр

Конечно, у вас может быть причина использовать событие enterFrame. Вы все еще можете сделать это, как в вашем примере, но позвольте progressHandler из моего примера заполнить ваши переменные; или подождите, пока не будет запущено первое событие progress, затем удалите прослушиватель события progress и добавьте вместо него свой обработчик enterFrame. Пока вы не пытаетесь прочитать mapLoader.loaderInfo.bytesTotal до того, как будет запущено первое событие прогресса, вы должны быть в порядке.

...