Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   MovieClipLoader что нужно обязательно (http://www.flasher.ru/forum/showthread.php?t=104857)

CrazyFlasher 05.12.2007 12:20

Ну да, согласен...всё зависит от структуры кода. Где-то удобнее так, а где-то по-другому

Beta-tester 07.12.2007 21:20

При переделывании всего под MovieClipLoader появились некоторые проблемы.

Вот такая ситуация:
через лоадварс загружается инфа из ПХП. На онЛоад стоит обработчик, который обрабаытвает полученную информацию(вставляет описания к превьюшкам) и вызывает ф-ку, которая загружает новые превьюшки.
Загрузка происходит приблизительно вот так:

Код:

//floadingnum - номер загружаемой превьюхи
floadingnum = 0;
var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(this);
this.onLoadComplete = function() {
//Скроем progressbar и покажем превьюху
        _root.b[floadingnum].bar._visible = false;
        _root.b[floadingnum].prev._visible = true;
        delete _root.b[floadingnum].bar.onEnterFrame;
//переходим к следующей превьюхе
        floadingnum++;
//Проверим, может уже нечего загружать? :)
            if (count>floadingnum) {
//Далее включаем анимацию прогрессбара для следующей загрузки
                    _root.b[floadingnum].bar.onEnterFrame = function() {
                        _root.b[floadingnum].bar._rotation -= 15;
                    };
                    _root.b[floadingnum].strelka._visible = true;
                    _root.b[floadingnum].f._visible = false;
//Ну и наконец включам следующую загрузку
                    loader.loadClip("/prev/"+prev[floadingnum], _root.b[floadingnum].prev);
}
};

//Самая первая загрузка.
_root.b[0].bar.onEnterFrame = function() {
        _root.b[0].bar._rotation -= 15;
};
_root.b[0].bar._visible = true;
_root.b[0].prev._visible = false;
loader.loadClip("/prev/"+prev[0], _root.b[0].prev);

Принцип такой. Есть например пять обьектов, куда грузятся превьюхи. В массиве b содержаться их имена(я знаю что можно сделать лучше и правильнее, просто это не успел ещё переделать. Но и так работает. По этой асти вопросов нет). Есть сколько-то страниц(всё это получается из скрипта). При переходе на следующую страницу запрашиваются у пхп инфа+имена новых превью, а затем вызывается ОнЛоад(см. самое начало), который опять вызывает загрузку превью. И вот тут появляются проблемы. Если предыдущие превью не все загрузились, то начинается страшный бред. ИМХО, при переходе на новую страничку надо убить onLoadComplete. Но вот что я только не пробовал не помогает. Прбовал в ОнЛоад(см. самое начало), который брабатывает полученную инфу из ПХП, ставить loader.removeListener(this); не помогает!!!
Как быть? Как прервать загрузку и обработку событий загрузки при переходе на новую страницу? Или ошибка не сдесь?

В старом варианте с loadmovies была немного другая оработка(использовался onEnterFrame), которая припереходе на новую страницу затиралась и всё отдично работало.

ДОЮАВЛЕНО-------------------------------------------------------------------------------------------
ИМХО, если прибить loader(var loader:MovieClipLoader = new MovieClipLoader()), то всё должно работать нормально.
Подскажите плиз как обнулить или пересоздать или убить его?

wvxvw 07.12.2007 21:51

По всей видимости сюда вставить проверку "страницы"
Код:

if (allcount>floadingnum) {
Только что такое страница\переход на новую страницу в данном контексте не понятно.

Beta-tester 07.12.2007 22:08

Для того чтобы не сбивать с мысли исправил allcoun на count, где count - число превьющек. Скрипт выдаёт постраничную информацию. И может так случиться,то на последней будет напрмер не 5, а только 3 превьюхи. Вот в count и будет 3. Эта проверка для этого.

А сам переход на страницы сдесь не привидён(слишком весомо сюда всё вставлять). Смысл таков. Есть ф-ция ОнЛоад(о ней я в начале предыдушего поста написал), она получает от скрипта инф, обрабатывает и вызывает загрузку. Т.е. преход на новую страницу - всеголишь вызов пхп скрипта с другим параметром. Т.е. изначально вызываем пхп скрипт так чтобы он выдал первую страницу, а при переходе надругую вызываем пхп с параметром stranica=3 к примеру. Дальше обработчик онЛоад получает всю инфу и распихиват всё по полкам. Всё предельно просто.
Но имхо копать надо совсем не здесь.
Ошибка скорее всего тут:
Если не все превью загрузились и был нажат переход на новую страницу, то начатая загрузка продолжается и тут начинается новая загрузка. Неуспевает ещё загрузиться новая превью, как загружается старая(с прошлой страницы), а листнер то общий!!!
Как убить loader(var loader:MovieClipLoader = new MovieClipLoader()) или оборвать все его закачки и обработки событий, как бы сброс сделать?

Добавлено -----------------------------------------------------------------------------

Появилась идея. Если причина там, где я дуаю то можно попробовать проверять тот ли файл загрузился. Вот какой вопрос:
Вот код:
Код:

var loader:MovieClipLoader = new MovieClipLoader ();
loader.addListener (this);
this.onLoadStart = function () {
        trace ("Загрузили!");
};
loader.loadClip ("q.jpg", _root.m.mc.w);
loader.loadClip ("w.jpg", _root.m2.mc.w);

Как в onLoadStart получить имя загржуженного файла?

wvxvw 07.12.2007 23:31

Код:

var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(this);
this.onLoadStart = function(mc:MovieClip) {
        trace(mc._url);
};
loader.loadClip("http://flasher.ru/forum/image.php?u=37925&dateline=1196123285",_root.createEmptyMovieClip("clip",0));

По идее так. Только не понимаю, чем это поможет...

etc 07.12.2007 23:34

Beta-tester получает второй плюс.

Beta-tester 08.12.2007 00:18

Цитата:

Сообщение от wvxvw
Код:

var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(this);
this.onLoadStart = function(mc:MovieClip) {
        trace(mc._url);
};
loader.loadClip("http://flasher.ru/forum/image.php?u=37925&dateline=1196123285",_root.createEmptyMovieClip("clip",0));

По идее так. Только не понимаю, чем это поможет...

Огромное спасибо. Убедился, что там где прогнозировал косяк есть. Завтра буду исправлять.
Как и писал выше косяк в том, что при переходе на другую страницу начатая закачка не обывается. Соответсвенно когда уже устаревшая закака завершается вызывается ОнЛоадКомплит. А в его обработчике не проверяется, какой файл загрузился и он считает, что загрузился файл на новой странице.

P.S. Возможно это не единственный косяк. Завтра буду смотреть...

Цитата:

Сообщение от __etc
Beta-tester получает второй плюс.

Как вы правильно заметили в прошлый раз я на этом форуме очень давно. И вот тогда, когда я на нём активно общался такого маразма с принудительным выставлением тега CODE не было...+на всех форумах, которые я сейчас часто посещаю никто не заставляет ставить тег CODE. Хочешь ставь хочешь не ставь. Вообще это первый встреченный мною форум где из-за такого пустяка чутли не скандал устраивают.
Вы думаете я специально игнорирую ваши замечния? Это автоматически оисходит. Если несколько лет подряд елать одно и тоже,то потом в одночасье прекратить это длать или делать подругому не получиться...привычка называется :)
А вообще какая разница? Неужели эта рамка делает что-то красивее? не говорю про то, что чтение ИМХО только усложняется.

etc 08.12.2007 00:23

Цитата:

Сообщение от Beta-tester
Это автоматически оисходит.

Вот и плюс тоже — автоматически. У вас было достаточно времени на исправление, не заметить косяк просто невозможно.
Нужно уважать собеседников, оформляя код. Всегда.
Продолжать полемику на эту тему я очень не рекомендую, ибо вредно.

Для тех, кому непонятно, зачем оформлять код: это необходимо для того, чтобы простыня кода не была выравнена по левому краю, не была без табуляции и не расстягивала страницу форума на два километра по вертикали и горизонтали. Про правильный моноширинный шрифт, нормальное копирование, отсутствие левых переносов я вообще промолчу.

iNils 08.12.2007 00:41

И не было подобных эффектов со смайлами:
var date:Data = new Date ();

Beta-tester, данный вопрос не обсуждается и что правила других форумов нас не интересует. Поэтому либо вы их соблюдаете, либо покидаете форум - раз забываете.

Beta-tester 08.12.2007 09:20

Цитата:

Сообщение от __etc
Нужно уважать собеседников, оформляя код. Всегда.

Уважать нужно.

Цитата:

Сообщение от __etc
Продолжать полемику на эту тему я очень не рекомендую, ибо вредно.

Уважаемые модераторы. Я не собирался обсуждать правила. Я обьяснил причину, очему так происходит, обьяснил, что происходит это не специально. Даже в уголовном кодексе предусмотрены смягчения за не преднамеренное совершение преступления.

P.S. Пошёл на путь исправления. Прошу мне в этом помочь и не бить больше вилами! Больно всё-таки :)


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

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