Форум 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)

Beta-tester 03.12.2007 22:26

MovieClipLoader что нужно обязательно
 
Здравствуйте!
Просьба сильно не пинаться, понимаю что вопрос глупый, но всё-таки.
Почитал хэлп на тему MovieClipLoader. Судя по примеру в хэлпе нужно создать:
1) Мувиклип куда всё будем грузить.
2) Некий var my_mcl:MovieClipLoader = new MovieClipLoader();
3) Листнер

Обязательно всё это создавать? Судя по тому, что аналогично в хэлпе про LoadVars юзается слишком много обьектов, а можно обойтись меньшим количеством, то и тут можно как-то проще.

Обычно в такой ситуации я просто методом эксперимента нахожу ответ. Но сейчас нет такой возможности, поэтому прошу помощи у вас.

Заранее огромное спасибо всем!

CrazyFlasher 03.12.2007 22:38

Код:

var l:MovieClipLoader = new MovieClipLoader();
//mc - мувиклип
l.loadClip("1.jpg", mc);


Beta-tester 03.12.2007 23:04

Ага.
А чтобы обработать событие на завершение загрузки(MovieClipLoader.onLoadComplete) или подобное нужно создать листнера обязательно?

Molecula 03.12.2007 23:10

Да, он один на все события MovieClipLoader-а.

etc 04.12.2007 00:07

Только не надо ваять в качестве некоего загадочного «лисенера» какой-то левый объект.

CorC 04.12.2007 10:03

Например Рут? :)

etc 04.12.2007 10:19

Рут как бы перебор, но можно и его.

Beta-tester 04.12.2007 18:58

Цитата:

Сообщение от __etc
Только не надо ваять в качестве некоего загадочного «лисенера» какой-то левый объект.

Сорри, но не очень понял смысл сго выражения. Что значит не надо брать левый обьект?

Вот так помойму проблем не будет:
mc1,mc2,..mcn - мувики куда будем грузить.
loader - MovieClipLoader
loadlistner - листнер
Разве так не будет работать?

ДОБАВЛЕНО --------------------------------------------------------------------------------------------
Пишу код:
Код:

var loader:MovieClipLoader = new MovieClipLoader();
        loader.loadClip("123.jpg", _root.movik.qwerty.mc);
        var mclListener:Object = new Object();
        _root.movik.qwerty.mc.addListener(mclListener);
_root.movik.qwerty.mc.mclListener.onLoadComplete = function(){
                trace("Загрузили!");
}



Картинка грузиться, а вот trace не срабатывает! Где ошибка?

etc 04.12.2007 19:59

Beta-tester вы не первый день на форуме, а код оформлять так и не научились.

mclListener вообще не нужен, это мусорный объект.

CrazyFlasher 04.12.2007 20:02

Код:

var l:MovieClipLoader = new MovieClipLoader();
var o:Object = new Object();

l.addListener(o);

o.onLoadInit = function(){
    trace("loaded");
}
l.loadClip("123.jpg", myMc);


etc 04.12.2007 20:08

Ещё один ваяет мусор…

Beta-tester 04.12.2007 20:56

Цитата:

Сообщение от __etc
Beta-tester вы не первый день на форуме, а код оформлять так и не научились.

А-а-а, только вилами не надо!!!Я ещё жить хочу :quiet:
Каюсь, забываю. Не со зла, честно.

Цитата:

Сообщение от __etc
Ещё один ваяет мусор…

Вот чтобы не ваять мусор и создал всю эту темку. Основной вопрос был что нужно юзать, а что мусор. Как обойтись без листнера сразу на мовиклиплоалеробджэкт вешать обработчик? Аля:

Код:

var loader:MovieClipLoader = new MovieClipLoader();
loader.onLoadComplete = function(){
                trace("Загрузили!");
}
        loader.loadClip("123.jpg", _root.movik.qwerty.mc);

Так ?

Добавлено:--------------------------------------------
Код:

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

Работает!
Вот это я ещё в начале темы пытался выяснить.

iNils 04.12.2007 20:58

Вешать надо на this.

Beta-tester 04.12.2007 21:25

Цитата:

Сообщение от iNils
Вешать надо на this.

Всмысле? А мой последний код неправильный?

iNils 04.12.2007 21:29

Код:

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


Beta-tester 04.12.2007 22:16

Цитата:

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

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



Сорри, за возможно глупый вопрос. А почему надо делать именно так? Мой последний код чем-то хуже?
Поймите меня правильно, я не придираюсь, а хочу докопаться до смысла почему именно так, чтобы это понять и впредь делать правильно.

Заранее спасибо!

iNils 04.12.2007 22:18

Зачем создавать лишнию переменную?
А когда будете писать классы, ваша схема не сработает.

CorC 05.12.2007 10:40

Цитата:

Сообщение от iNils
Вешать надо на this.

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

CrazyFlasher 05.12.2007 11:05

Цитата:

А когда будете писать классы, ваша схема не сработает.
а что именно не сработает? я пишу на классах и обычно создаю отдельный листенер для прослушки событий onLoadInit, onLoadError и т.д. Или я о другом?

wvxvw 05.12.2007 12:11

Ну, в смысле, специально создавать объект-слушатель не нужно, на события МувиКлипЛоадера можно подписать все, что вообще можно подписать на события. Лично мне бывает удобно создавать 2 слушателя - первый занимается учетом, второй преобразованиями, но это кому как нравится =) Т.е. предположим, есть у меня какой-нть класс, который умеет отображать всякие прогрессбары и есть класс, который умеет хранить уменьшенные привьюхи - подписываю их обоих на события МКЛоадера - как-то не логично, что в одном классе будут и сложены в кучу привьюхи с прогрессбарами =)

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. Пошёл на путь исправления. Прошу мне в этом помочь и не бить больше вилами! Больно всё-таки :)

darksranger 08.12.2007 14:47

Код:

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

как сделать прелоадер к этой загрузки ?

Beta-tester 09.12.2007 11:29

Цитата:

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

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

как сделать прелоадер к этой загрузки ?

А что конкретно не получается?

CorC 10.12.2007 09:57

Не получается прочитать про MovieClipLoader.onLoadProgress наверное.


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

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