Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Предзагрузка нескольких картинок с пом. MovieClipLoader ? (http://www.flasher.ru/forum/showthread.php?t=79995)

JeeP 19.05.2006 20:47

Предзагрузка нескольких картинок с пом. MovieClipLoader ?
 
есть 1 объект MovieClipLoader
с помощью которого я загружаю картинки.

есть, к примеру, 2 мувиклипа(в реале это динамическое число) в которые я гружу картинки с помощью имеющегося MovieClipLoader`а(использую только один).

в MovieClipLoader я использую listener.onLoadProgress(и только его) для отображения количества загруженых байт для каждой картинки.


вопрос - как мне показать суммарное количество загруженных байт для двух картинок?

пример кода следующий:
Код:

var container:MovieClip = this.createEmptyMovieClip("container", this.getNextHighestDepth());
var image:MovieClip = container.createEmptyMovieClip("image", container.getNextHighestDepth());
var image2:MovieClip = container.createEmptyMovieClip("image2", container.getNextHighestDepth());

var mcLoader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number, num:Number):Void {
        trace(target + ".onLoadProgress with " + bytesLoaded + " bytes of " + bytesTotal);
}
mcLoader.addListener(listener);

mcLoader.loadClip("http://www.site.kiev.ua/img1.jpg", image);
mcLoader.loadClip("http://www.site.kiev.ua/img2.jpg", image2);

но в примере показывается кол-во загруженных байт отдельно для каждой картинки, а необходимо показывать суммарное значение.

Nirth 19.05.2006 20:53

использовать на каждую загрузку по MovieClipLoader'у

Usnul 19.05.2006 21:01

а еще читать мануал, ага =)

Nirth 19.05.2006 21:07

вообще не так давно писал класс, не тестил толком, было сделанно с расчетом на Flash Player 6 так что там нету MovieClipLoader

но грузит много всякой дряни.

Код:

import mx.events.EventDispatcher;
import mx.utils.Delegate;
/**
 * Enter description here
 *
 * @author  Nirth
 * @version 1.0
 * @since 
 */
 
 //Event dispatches with interval while loading in progress
 [Event("progress")]
 //Event dispatches when data is loaded
 [Event("complete")]
class com.onorange.lib.utils.MultiLoader {
        //initialize event dispatcher
        private static var __initED = EventDispatcher.initialize(MultiLoader.prototype);
        public var dispatchEvent:Function;
        public var addEventListener:Function;
        public var removeEventListener:Function;
        //
        private var __objectsToLoad:Array;
        private var __pathes:Array;
        private var __intervalID:Number;
        private var __interval:Number;
        //
        /**
        * Constructor, creates instance of MultiLoader
        * @usage                                  import com.onorange.lib.utils.MultiLoader
        *                                                        var loader:MultiLoader = new MultiLoader(50,[_root.mc1,_root.mc1.mc2,_root.mc3],["mc1.swf","mc2.swf","mc3.swf"]);
        *                                                        function progress(evt:Object):Void {
                                                                        trace(evt.loaded+"/"+evt.total);
                                                                }
                                                                loader.addEventListener("progress",onProgress);
                                                               
        * @param  interval                  Number, interval in which <code>progress</code> event will be dispatched
        * @param  loadArray                Array, of objects, in which you want to load media
        * @param  path                      Array, of pathes to media
        * @return                                  Nothing
        */
        public function MultiLoader(interval:Number, loadArray:Array, path:Array) {
                //assign variables values
                __interval = interval;
                __objectsToLoad = loadArray;
                __pathes = path;
                //start loading
                __initLoading(loadArray, path);
                //start interval
                __intervalID = setInterval(Delegate.create(this, __update), __interval);
        }
       
        //private methods
        private function __update():Void {
                var t:Number = 0;
                var l:Number = 0;
                for (var i:Number = 0; i<__objectsToLoad.length; i++) {
                        t += __objectsToLoad[i].getBytesTotal();
                        l += __objectsToLoad[i].getBytesLoaded();
                }
                var p:Number = Math.round(l/t*100);
                dispatchEvent({type:'progress',loaded:l,total:t,percent:p});
                if (p == 100) {
                        dispatchEvent({type:'complete',loaded:l});
                        clearInterval(__intervalID);
                }
        }
        private function __initLoading(objects:Array, path:Array):Void {
                for (var i:Number = 0; i<objects.length; i++) {
                        var method:String = (objects[i] instanceof MovieClip) ? "loadMovie" : "loadSound";
                        objects[i][method](path[i]);
                }
        }
}

о найденых багах писать сюды

JeeP 19.05.2006 21:08

ну а используя только один MovieClipLoader, такое возможно? чета не могу допетрать.

Цитата:

Сообщение от Usnul
а еще читать мануал, ага =)

ткни меня носом, будь добр.

Nirth 19.05.2006 21:10

Слушай...MovieClipLoader в любой отрезок времени, грузит максимум один мувик, это значит что он не может посчитать два мувика.

etc 19.05.2006 21:28

Nirth, класс AS2 для Flash Player 6? Абсурд =)

__i 19.05.2006 22:00

Цитата:

Сообщение от Nirth
Слушай...MovieClipLoader в любой отрезок времени, грузит максимум один мувик, это значит что он не может посчитать два мувика.

Кхм, а потестить слабо? как показала практика не 1, а 2 %))), эт раз,

во вторых можно типа надругаться над MovieClipLoader все мувики которые грузишь складываеш в массив, а потом на
на сетИнтервал (а по мне лучше на онЕнтерФрейм) повесить обработчик который будет носиться по этому массиву и считать сумму всех загруженых и полных байт, а потом возвращать их отношение...%)

iNils 19.05.2006 22:06

Цитата:

Сообщение от __etc
Nirth, класс AS2 для Flash Player 6? Абсурд =)

Ни когда не замечал, что выбирая для публикации версию 6, есть возможность указать AS2? А для 5-ки нет.

__i 19.05.2006 22:07

Цитата:

Сообщение от __etc
Nirth, класс AS2 для Flash Player 6? Абсурд =)

а в чем абсурд? %)

Цитата:

Сообщение от help
MovieClipLoader class
Availability
Flash Player 7.

Цитата:

Сообщение от help
class
Availability
Flash Player 6.

Код:

//****************************************************************************
//Copyright (C) 2003-2004 Macromedia, Inc. All Rights Reserved.
//The following is Sample Code and is subject to all restrictions on
//such code as contained in the End User License Agreement accompanying
//this product.
//****************************************************************************
class mx.utils.Delegate extends Object
{..................................



Часовой пояс GMT +4, время: 18:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.