PDA

Просмотр полной версии : не работает onEnterFrame


cerberus_nsv
29.01.2010, 16:59
Здравствуйте!

Я без году неделя во флэше... потому попрошу не сердчать!!!

Не могу решить свою проблему!!! есть некий файл XML который подгружается во Flash! и каждый новый фрейм newFrame, стыкуется к предыдущему! что-то типа слайдера... в кадом новом фрейме атачится клип прелоадера newPreload для картинки... но условия работы этого прелоадера newPreload в функция onEnterFrame работает лишь для последнего созданного фрейма newFrame!

проверял с помощью трейса... до функции onEnterFrame видит все клипы newPreload! а внутри onEnterFrame, только последний!!!!

помогите пожалуйста разобраться! буду очень признателен!!! вроде логически всё правильно!!! но чувствую, краеугольный камень где-то зарыт!!!

for(i=0;i<allSoftData.length;i++)
{
newFrame=slider.blank_slider.attachMovie('frame_soft','frame'+i,i);
newFrame._y=i*newFrame._height;

newFrame.txt_soft.text=allSoftData[i].firstChild.firstChild;
newFrame.txt_desc.text=allSoftData[i].firstChild.nextSibling.firstChild;
newFrame.txt_req.text=allSoftData[i].firstChild.nextSibling.nextSibling.firstChild;
newPreload=newFrame.mc_load.attachMovie('pic_preloader','preload'+i,i);

var ab = newFrame.mc_pic.loadMovie("xml/"+allSoftData[i].firstChild.nextSibling.nextSibling.nextSibling.firstChild);

trace(newPreload);

onEnterFrame = function(ab,bytesLoaded,bytesTotal)
{
trace(newPreload);

if(bytesLoaded<bytesTotal)
{
newPreload._alpha = 100;
}

if(bytesLoaded==bytesTotal)
{
newPreload._alpha = 0;
}
}
}

Буду очень признателен! т.к. уже просто нет идей... и допонимание с Флешем уже теряется!

udaaff
29.01.2010, 17:27
Не работает потому что все неправильно.
Используйте MovieClipLoader, если хотите процесс загрузки отслеживать.

cerberus_nsv
29.01.2010, 18:00
процесс загрузки отслеживается! но только onEnterFrame выполняет действия, для последнего i, т.е. фрейма... обходя все предыдущие...
хотя уже переделываю, под MovieClipLoader!!! Спасибо!

но если кто объяснит, мне мою дилемму, чтоб я понял, почему обходит предыдущие, буду признателен!!! раз он находится внутри цикла...

Hauts
29.01.2010, 18:13
Ну вы его каждую новую итерацию цикла переопределяете, этот onEnterFrame, вот он для последнего и остается.

Zik.
29.01.2010, 19:13
Я один не понимаю эту строчку?
onEnterFrame = function(ab,bytesLoaded,bytesTotal)

mooncar
29.01.2010, 19:18
Нет, не один. EnterFrame не имеет аргументов.

cerberus_nsv
29.01.2010, 19:36
исправил!!! спасибо всем! только я начинаю понимать, что для меня этот вариант, что MovieClipLoader, суть не меняют...
что мне нужно сделать, для того, чтоб последняя интерация onEnterFrame не перекрывала предыдущие? или как задать, для какого именно прелоадера newPreload, должен проходить onEnterFrame... надеюсь, что боль менее обхяснил, что надо!!! а то уже плавлюсь!

newPreload.onEnterFrame = function()
{
loading = newFrame.mc_pic.getBytesLoaded();
total = newFrame.mc_pic.getBytesTotal();

trace(i);
trace(loading);
trace(total);
trace(newPreload);

if(loading<total)
{
newPreload._alpha = 100;
}

if(loading==total)
{
newPreload._alpha = 0;
}
}

Hauts
29.01.2010, 19:48
Итерация. Значит "повторение".

newPreload.onEnterFrame = function(){
var loading = this.getBytesLoaded();
var total = this.getBytesTotal();
if(loading<total){
this._alpha = 100;
}

if(loading==total){
this._alpha = 0;
}
}


Попробуйте так, хотя я не могу до конца врубиться в ваш код.

cerberus_nsv
29.01.2010, 20:07
Тенкс тебе!!! но так не получается, потому, как newPreload и картинка два разных мувика... и getBytesTotal берётся с newFrame.mc_pic, но всё равно спасибо!!! а за интерацию я понял!!! только, не понял почему перекрывает, раз внутри цыкла!

Добавлено через 7 часов 56 минут
Люди помоги пожалуйста разобраться!!!! что именно не так у меня!!! могу отвечать на вопросы, если код не понятен! Используя MovieClipLoader, пришёл к тому, же что было изначально с onEnterFrame!!!

и если кто-то может объясните, почему в трейсе t1 показывает реальные значения с каждой новой интерацией... а в трейсе t2 выдаёт результат последнего и плюс 1?

for(i=0;i<allSoftData.length;i++)
{
newFrame=slider.blank_slider.attachMovie('frame_soft','frame'+i,i);
newFrame._y=i*newFrame._height;
newPreload=newFrame.mc_load.attachMovie('pic_preloader','preload',i);

newFrame.txt_soft.text=allSoftData[i].firstChild.firstChild;
newFrame.txt_desc.text=allSoftData[i].firstChild.nextSibling.firstChild;
newFrame.txt_req.text=allSoftData[i].firstChild.nextSibling.nextSibling.firstChild;

var clipLoader = new MovieClipLoader();
var preloader = new Object();
clipLoader.addListener(preloader);

clipLoader.loadClip("xml/"+allSoftData[i].firstChild.nextSibling.nextSibling.nextSibling.firstChild, newFrame.mc_pic);

trace(newPreload);

trace("t1="+i);

preloader.onLoadStart = function()
{
trace("t2="+i);

newPreload._alpha = 100;
}

preloader.onLoadComplete = function()
{
newPreload._alpha = 0;
}
}

Hauts
30.01.2010, 09:59
cerberus_nsv, слово "итерация" пишется без буквы Н.

Напишите функции для своих задач, проще будет. Примерно так:

for (i=0; i<allSoftData.length; i++) {
var newFrame = slider.blank_slider.attachMovie('frame_soft', 'frame'+i, i, {_y:i*newFrame._height});
var newPreload = newFrame.mc_load.attachMovie('pic_preloader', 'preload', i);
var t1 = allSoftData[i].firstChild.firstChild;
var t2 = allSoftData[i].firstChild.nextSibling.firstChild;
var t3 = allSoftData[i].firstChild.nextSibling.nextSibling.firstChild;
var url = "xml/"+allSoftData[i].firstChild.nextSibling.nextSibling.nextSibling.firstChild;
setNewFrameTexts(newFrame, t1, t2, t3);
manageNewPreload(url, newFrame.mc_pic, newPreload);
}
function setNewFrameTexts(frame, t1, t2, t3) {
frame.txt_soft.text = t1;
frame.txt_desc.text = t2;
frame.txt_req.text = t3;
}
function manageNewPreload(url, container, preloader) {
trace("Загружаем "+url+" в "+container+" и отслеживаем загрузку в "+preloader);
var clipLoader = new MovieClipLoader();
var listener = new Object();
listener.preloader = preloader;
listener.onLoadStart = function() {
this.preloader._alpha = 100;
};
listener.onLoadInit = function() {
this.preloader._alpha = 0;
};
clipLoader.addListener(listener);
clipLoader.loadClip(url, container);
}

cerberus_nsv
30.01.2010, 13:24
//2 Hauts: Огромное тебе Спасибо!!!!! всё блин заработало! :) и я даже понял в чём я был не прав!!! а именно дело в аргументах, которые указываются в вызове функций!!! без них он понимал, только последний результат!!! а за интерацию, не издевайся )))