Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание ProgressBar (http://www.flasher.ru/forum/showthread.php?t=173820)

Varlamov_AS 12.01.2012 11:35

Создание ProgressBar
 
Доброго времени суток. Изучаю создание прелоадеров.
Ситуация такая: сделал загрузчик (немного коряво, но вроде работает) с выводом процента загруженных данных.
Код AS3:

package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
// Собственно класс с полосой загрузки
import progressBar.ProgressBar;
 
public class PreLoader extends MovieClip {
    public var urlLoader:URLLoader = new URLLoader();
 
    private var _urlRequest:URLRequest;
    private var _progressBar:ProgressBar = new ProgressBar();
    private var _percent:uint = 0;
 
    public function PreLoader() {
        super();
        stop();
 
        _urlRequest = new URLRequest();
 
        urlLoader.addEventListener(Event.INIT, downloadStart);
        urlLoader.addEventListener(Event.COMPLETE, downloadComplete);
        urlLoader.addEventListener(ProgressEvent.PROGRESS, downloadProgress);
    }
 
    public function startDownload(url:String):void {
        _percent = 0;
        _progressBar = new ProgressBar();
        _progressBar.initDownload();
 
        _urlRequest.url = url;
        urlLoader.load(_urlRequest);
    }
 
    private function downloadStart(e:Event):void {
      this.addChild(_progressBar);
    }
 
    public function getProgressBar():ProgressBar {
        return _progressBar;
    }
 
    private function downloadComplete(e:Event):void {
        dispatchEvent(new PreloaderEvent(PreloaderEvent.PRELOADER_LOAD_COMPLETE));
 
        e.target.removeEventListener(Event.INIT, downloadStart);
        e.target.removeEventListener(Event.COMPLETE, downloadComplete);
        e.target.removeEventListener(ProgressEvent.PROGRESS, downloadProgress);
    }
 
    private function downloadProgress(e:ProgressEvent):void {
        if (e.target.bytesTotal != 0)
            _percent = Math.round((e.target.bytesLoaded / e.target.bytesTotal) * 100);
      //Здесь процент загрузки передается в ProgresBar
        _progressBar.progress(_percent);
    }
}
}

Теперь нужен совет по созданию ProgressBar'a, т.е. как правильнее и лучше организовать полосу загрузки? Может есть какие-то готовые варианты, причем использование Flex нежелательно (Только AS3).

Astraport 12.01.2012 11:46

Просто нарисуйте два прямоугольника, один фоновый, другой скалируйте.
Сначала в downloadStart:
Код AS3:

progressBar.scaleX = 0;

Затем в downloadProgress:
Код AS3:

progressBar.scaleX = e.target.bytesLoaded / e.target.bytesTotal;


goodguy 12.01.2012 11:51

Не очень это будет смотреться. Чисто для самого простого загрузчика. Лучше сделать изображение загрузчика, поставить сверху маску, и уже маску масштабировать


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

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