Вход

Просмотр полной версии : Флешку с прелоадером глючит


neudor
02.04.2008, 16:34
Здравствуйте.

Такая проблема. Есть флешка. У неё есть прелоадер. Весь код - вот он.

preloader.onEnterFrame = function() {
totalFileSize = _root.getBytesTotal();
bytesLoaded = _root.getBytesLoaded();
percentLoaded = Math.floor(100*bytesLoaded/totalFileSize);

preloader.txtfield.text = percentLoaded + "%";

if (percentLoaded >= 100) {
_root.gotoAndStop (2);
}
}

_root.onEnterFrame = function() {
_root.lineStyle(5, 0xff00ff, 100, true, "none", "round", "miter", 1);
_root.lineTo(_xmouse, _ymouse);
}

После того как он отрабатывает, проигрывание не останавливается на втором кадре, а зацикливается и очень быстро мелькают первый и второй кадры. В чём косяк не могу понять. Флеш ковыряю только второй день =).

Obi
02.04.2008, 16:36
_root.onEnterFrame = function() {
_root.lineStyle(5, 0xff00ff, 100, true, "none", "round", "miter", 1);
_root.lineTo(_xmouse, _ymouse);
}

— этот код какое отношение к прелоадеру имеет?

Лишних слушателей ообще быть не должно, поэтому попробуйте написать так:

preloader.onEnterFrame = function() {
totalFileSize = _root.getBytesTotal();
bytesLoaded = _root.getBytesLoaded();
percentLoaded = Math.floor(100*bytesLoaded/totalFileSize);

preloader.txtfield.text = percentLoaded + "%";

if (percentLoaded >= 100) {
_root.gotoAndStop (2);
delete this.onEnterFrame;
}
}

neudor
02.04.2008, 16:53
Лишний слушатель - это чтоб посмотреть что в принципе случится если его добавить, потому что потом он может понадобиться.

ваш совет попробовал, не помогло. Я пробовал и removeMovieClip() в разных вариантах, и даже this.enabled = false.
Всё так же глухо пока.

Obi
02.04.2008, 17:08
Вообще, у вас с кодом, который вы выложили, все нормально, значит косяк где-то в другом месте. Выложите исходник.

divinus
02.04.2008, 17:39
ну попробуйте еще во втором кадре "stop()" написать... )

Dzhav
02.04.2008, 20:08
А ты попробуй так:
preloader.onEnterFrame = function() {
totalFileSize = _root.getBytesTotal();
bytesLoaded = _root.getBytesLoaded();
percentLoaded = Math.floor(100*bytesLoaded/totalFileSize);

preloader.txtfield.text = percentLoaded + "%";

if (percentLoaded >= 100) {
delete this.onEnterFrame;
_root.gotoAndStop(2);
}
}
Сперва удали "onEnterFrame", а потом переходи на второй кадр

neudor
03.04.2008, 09:50
Всем огромное спасибо. Помогли разобраться.
Сделал вот так.

stop();
preloader.onEnterFrame = function() {
totalFileSize = _root.getBytesTotal();
bytesLoaded = _root.getBytesLoaded();
percentLoaded = Math.round(100*bytesLoaded/totalFileSize);

preloader.txtfield.text = percentLoaded + "%";

if (percentLoaded >= 100) {
_root.gotoAndStop(2);
}
}

Ну и ещё один вопрос в тему.
Я, руководствуясь хорошим стилем, завёл отдельный слой actions. Нужно ли, в соответствии с этим же стилем, писать весь код в одном кадре, или создавать на шкале несколько ключевых кадров, и раскидывать по ним?

Dzhav
03.04.2008, 13:39
В твоем случае должно быть как минимум два кадра. Ты же сам написал _root.gotoAndStop(2);
В первом кадре - код загрузчика, а во втором - весь остальной код