Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   прелоадер рисует линию (прогр) надо длиннее. (http://www.flasher.ru/forum/showthread.php?t=64423)

rdm.vuk 02.11.2004 00:57

прелоадер рисует линию (прогр) надо длиннее.
 
Есть прелоадер
stop();
var tot = _root.getBytesTotal();
var dif=0;
a=12.5;
this.onEnterFrame = function () {
loaded = _root.getBytesLoaded();
percent = (loaded / tot) * 100;
if (a <= percent) {
a = a + 12.5;
this.createEmptyMovieClip("line" + a, _root.a);
cnt=0;
dif=Math.floor(percent);
}
with (_root.line + a) {
lineStyle(1, 0xffffff, 100);
moveTo(0, _root.a);
cnt=Math.floor(percent)-dif;
lineTo(cnt, _root.a);
}
if (percent >= 100) {
_root.line.removeMovieClip();
delete this.onEnterFrame;
gotoAndStop (2);
}
};
т.е. он рисует линии по 12 пикселов, а надо чтоб по 400, НО просто умножать не катит, потому что тогда прорисовка получается рывками, а нада плавно.

fiot 02.11.2004 16:00

for flash mx
 
Код:

MovieClip.prototype._apply = function ($obj)
{
        for (var item in $obj)
        {
                this[item] = $obj[item]
        }
}

MovieClip.prototype._loader = function ($obj, $event)
{
        var _total  = this.getBytesTotal()
        var _loaded  = 0
        var _percent = 0
        this.createEmptyMovieClip("_loader_line",    _global.depth++)
        this.createEmptyMovieClip("_preloader_line", _global.depth++)
        this._preloader_line._apply  ($obj)
        this._loader_line._apply      ($obj)
        this._loader_line.lineStyle  (5, 0x000000, 100)
        this._preloader_line.lineStyle(5, 0xFF0000, 100)
        this._loader_line.moveTo      ( this._loader_line._x,    this._loader_line._y )
        this._loader_line.lineTo      ( this._loader_line._size, this._loader_line._y )
        this._preloader_line.moveTo  ( this._loader_line._x,    this._loader_line._y )
        this.onEnterFrame = function ()
        {
                _loaded = _root.getBytesLoaded()
                _percent = _loaded/_total
                this._preloader_line.lineTo(Math.round(this._preloader_line._size*_percent),this._loader_line._y)
                if (_total == _loaded || _percent == 1){
                        this[$event].call(null)
                        removeMovieClip(this._preloader_line)
                        removeMovieClip(this._loader_line)
                        delete this.onEnterFrame
                }
        }
}

_global.depth = 0
_root._loader({_x:10,_y:100, _size: 200}, "foo")
foo = function () {
        trace('loaded')       
}

вставить в первый пустой фрейм... всё остальное в другой...

Штрек 03.11.2004 02:20

Re: прелоадер рисует линию (прогр) надо длиннее.
 
Вложений: 1
Цитата:

Оригинал написал(а) rdm.vuk
т.е. он рисует линии по 12 пикселов, а надо чтоб по 400, НО просто умножать не катит, потому что тогда прорисовка получается рывками, а нада плавно.
Что пишешь, то и имеешь.
Сделай так -
stop();
var tot = _root.getBytesTotal();
var dif = 0;
a = 12.5;
this.onEnterFrame = function() {
loaded = _root.getBytesLoaded();
percent = (loaded/tot)*100;
if (a<=percent) {
a = a+12.5;
this.createEmptyMovieClip("line"+a, _root.a);
cnt = 0;
dif = percent;// Ап
}
with (_root.line+a) {
lineStyle(1, 0xffffff, 100);
moveTo(0, _root.a);
cnt = (percent-dif)*400/12.5;// Ап
lineTo(cnt, _root.a);
}
if (percent>=100) {
_root.line.removeMovieClip();
delete this.onEnterFrame;
gotoAndStop(2);
}
};
Это, так сказать, грубая переделка -
линии будут отрисовываться не срого по 400 пикселей
из за неравномерности загрузки. Чтоб это поправить
вешаем маску шириной 400 пикселей,
а рисуем чуть длиннее - 430 пикс.
cnt = (percent-dif)*430/12.5;// Ап
После stop()
маска -
_root.createEmptyMovieClip("maska", 99);
with (maska) {
beginFill(0xff0000, 100);
moveTo(0, 0);
lineTo(0, 400);
lineTo(400, 400);
lineTo(400, 0);
lineTo(0, 0);
}
_root.setMask(maska);
Получится то что ты хотел, но на мой взгляд
дурдомный прелоад -
у fiot_а намного симпатичней
ЗЫ. И ремовишь ты мимо кассы,
надо -
with (this.line+a) {
clear();
}
for (i=12.5; i<=100; i=i+12.5) {
_root["line"+i].removeMovieClip();
}
Короче, гляди исходник...

Штрек 03.11.2004 02:27

Забыл маску отремовить
_root.maska.removeMovieClip();
//куда вставлять, думаю объяснять не надо...


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

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