PDA

Просмотр полной версии : Помогите сделать прелоадер


IamZuBila16
02.02.2008, 15:47
Вобщем так:
Я хочу сделать прелоадер с заливкой текса, по мере загрузки моего сайта. Я думаю что лучше всего это сделать маской...
Вобщем я создал 1 слой, на котором разместил надпись которую мне надо заливать... Сделал ее мувиклипом. Внутри сделал маску. Только в ней есть один нюанс. Вся маска находится в одном кадре, т.к. обьектов которые открывают текст очень много... тоесть это надо реализовать программным путем.. А точнее циклом..
Вобщем, по-моему вся проблема в том, что при загрузке свф, она сразу переходит во 2 кадр, в котором основной сайт... А при повторном нажатии ctrl+enter запускается прелоадер, но цикл заново не запускается...
Не могли бы Вы ответить почему???
Вот код 1 кадра:

ndp = new Array();
onLoad=function(){
for(i=1; i < 417; i++){ //всего 416 обьектов, каждый наз. m1, m2, m3 и т.д.
_root.attachMovie("m","m"+i,_root.getNextHighestDepth())
}
for(i=1; i < 417; i++){
ndp["m"+i]=i+1;
_parent.ndp["m"+i]._visible=0;
}
}

и вот код самого прелоадера (написаный в надписе, которая сделана мувиклипом):

onClipEvent(load){
_global.total=_root.getBytesTotal();
}
onClipEvent(enterFrame){
_global.loading=_root.getBytesLoaded();
trace(total);
trace(loading);
if(loading==total){
gotoAndStop(2);
}
}

Подскжите плз в чем ошибка??
Заранее благодарен...

etc
02.02.2008, 17:03
IamZuBila16, отредактируйте свой пост и оформите код тегами .

MrPoma
02.02.2008, 18:37
1. писать в кадре;
2. поставить stop(), чтобы не шло на 2 кадр;

сначала сделайте это, потом спрашивайте

IamZuBila16
03.02.2008, 23:56
Так сказать, "продолжение банкета"...
С выключением мувиклипов я уже разобрался, все работает... Но теперь не могу зделать их своевременное включение. :(
Подсажите пожалуйста как привязать прогрузку сайта к включению этих мувиклипов??
P.S. Чтобы полностью вникнуть в задачу, советую внимательно прочесть первоначальный вопрос...

iNils
04.02.2008, 01:54
ctrl+enter - это псевдозапуск. У него много багов и проблем. Например onLoad срабатывает только один раз, соответственно код в нем тоже. Но зачем он (onLoad) вам сдался? Никогда им не пользовался и не страдал от этого.

IamZuBila16
04.02.2008, 12:22
Да вот как раз onLoad пашет норм! Проблема в той части кода, где используется onEnterFrame... Хотя, походу, даже onEnterFrame работает правильно... По-моему, у меня там проблема с логикой...

iNils
04.02.2008, 12:31
Начните с избавления от кода типа onClipEvent. Это даже не вчерашний день, так писали неделю назад.

IamZuBila16
04.02.2008, 12:35
Я пытался избавиться, но так вобще ничего не пашет... Решил вернуть первоначальный вид...


ООО! Вышло!.. Что делать дальше?

Ну помогите же разобраться в коде:

stop();
_global.k=416;
onLoad=function(){
_global.total=_root.getBytesTotal();
ndpr = new Array();
ndp = new Array();
for(i=1; i <= 418; i++){
ndp["m"+i]=i+1;
_root.cc["m"+i]._visible=false;
if(i==418){
_global.p=1;
}

}
}
onEnterFrame=function(){
_global.loading=_root.getBytesLoaded();
_global.t=(Math.floor(((loading * 100)/total)* 100))/100;
if(p==1){
for(ii=1; ii < 418; ii++){
if(t==ii* 0,24){
_root.cc["m"+ii]._visible=true;
}
}
}
if(loading==total){
gotoAndStop(2);
}
}


Подскажите плиз, где ошибка? Почему появление мувиклипов не привязывается к прогрузке мувика вцелом???

MrPoma
05.02.2008, 04:57
старайтесь избавиться от констант в коде. если пишите:
_global.k=416;
почему бы не воспользоваться ею тут:
for(i=1; i <= 418; i++)

совсем не понятная кострукция, любой запутается.
for(i=1; i <= 418; i++){
ndp["m"+i]=i+1;
а надо:
for(var i:Number=0; i<k; i++){
ndp["m"+i]=i;

тут все сокращается:
_global.t=Math.floor(loading/total * 100);


var k:Number = 416;
var total:Number = this.getBytesTotal();

var ndpr:Array = new Array();
var ndp:Array = new Array();

for(var i:Number=1; i<=k; i++){
ndp["m"+i]=i+1;
this.cc["m"+i]._visible=false;
}
onEnterFrame=function(){
var loading:Number = this.getBytesLoaded();
var percent:Number = Math.floor(loading/total * 100);

for(var i:Number=1; i<=k; i++){
if(percent==i* 0,24){
this.cc["m"+i]._visible=true;
}
}
if(loading>=total){
delete this.onEnterFrame;
gotoAndStop(2);
}
}

IamZuBila16
05.02.2008, 23:45
Все-равно не пашет!!! :(
Вся надпись заполняется моментально, а не в зависимости от загрузки!...
КАК ЭТО ИСПРАВИТЬ???

iNils
05.02.2008, 23:46
Исходник выложить

MrPoma
06.02.2008, 00:04
не знаю, будет ли это работать, но идея должна быть ясна

onEnterFrame=function(){
var loading:Number = this.getBytesLoaded();
var ratio:Number = loading/total;

var num:Number = Math.round(k * ratio);
for(var i:Number=1; i<=num; i++){
this.cc["m"+i]._visible=true;
}
}
if(loading>=total){
delete this.onEnterFrame;
gotoAndStop(2);
}
}

зы. люди разучились думать