PDA

Просмотр полной версии : прелоадер рисует линию (прогр) надо длиннее.


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
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
Оригинал написал(а) 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();
//куда вставлять, думаю объяснять не надо...