PDA

Просмотр полной версии : MovieClipLoader - загрузка swf вместо фото


fortman
11.11.2008, 21:58
Добрый вечер. Глюк, который сейчас опишу, встречаю 3 раз, но раньше он как-то пропадал сам собой, сейчас же такой халявы не получается. Итак.
function fotoLoad(num:Number){
var loader:MovieClipLoader = new MovieClipLoader();
thisFoto = fotos_mc.createEmptyMovieClip("foto" + num, num);
loader.loadClip(thisFotoNode_array[num], thisFoto);

thisFoto.onEnterFrame = function(){
var loadObj:Object = loader.getProgress(thisFoto);
time = Math.floor(loadObj.bytesLoaded/loadObj.bytesTotal*100);
trace(time);
if(time >= 100){
delete thisFoto.onEnterFrame;
trace(loadObj.bytesTotal);
}
}
}

Это функция загрузки фоток. Однако они не грузятся, хотя путь их читает верно. При полной же загрузки фотки, чтобы удостовериться она ли грузится, вывожу ее размер, однако показывает не размер фото, а вес моего swf!! Это ни в какие ворота... В чём дело, подскажите!

scarbo
11.11.2008, 22:18
Не правильно пользуетесь MovieClipLoaderом.
Для отслеживания загрузки сделайте его слушателем объекта.
Все это есть в хелпе.

etc
11.11.2008, 23:12
scarbo, кого слушателем? Кого будет слушать MovieClipLoader и зачем?

Ошибка, скорее всего, в том, что в getProgress надо передавать this, а не thisFoto, равно как и delete this.onEnterFrame.

Wolsh
11.11.2008, 23:13
О! Код в стиле стимпанк! )))
Не, так не надо, для того MovieClipLoader и был создан на замену loadMovie, чтобы так никогда не извращаться. У класса MovieClipLoader есть отличные способности - onLoadStart чтобы активировать всякие прелоадеры для показа загрузки, onLoadProgress для отслеживания прогресса загрузки, onLoadComplete и onLoadInit для отслеживания ее окончания. Столько вкусностей, а Вы не пользуетесь))

scarbo
11.11.2008, 23:28
to _etc:var loader:MovieClipLoader = new MovieClipLoader();
var myObj:Object = new Object();
loader.addListener(myObj)
myObj.onLoadStart = function(target){
...
}

loader слушает myObj.

etc
11.11.2008, 23:50
scarbo, ну, во первых, всё наоборот, а во вторых, тру флешеры не создают трешевый-объект типа «слушатель».

scarbo
11.11.2008, 23:52
Ради Бога...

Art_133
12.11.2008, 00:20
__etc обьясните пожалуйста, почему не создаётся слушатель в этом случае? Я как раз читал что слушатель желателен в этом случае и аргументируется это тем что некоторая часть возможностей класса MovieClipLoader не доступна на прямую. Для доступа к которым создаётся слушатель.
Обьясните что не так?

etc
12.11.2008, 00:30
Art_133, потому что он не нужен. Этот самый «слушатель» есть некий непонятный обыкновенный объект, с объявленными свойствами-функциями, которые запускаются бог знает в какой области видимости, висят в памяти и являются ничем иным, как паразитами.
А всё потому, что начинающие разработчики пишут методы типа fotoLoad, с абстрактным индексом фотографии, который никакой смысловой нагрузки не несет, кроме индекса создаваемого клипа, вместо того, чтобы написать класс-наследник MovieClip, который сам загружает фото по url (больше ему ничего знать не нужно), подписывается на события (а не подписывает какой-то левый «слушатель»), крутит прелоадер и рапортует об окончании загрузки, если это необходимо.

fortman
12.11.2008, 02:48
Ух, как вас много...
Про слушатель объекта вообще не думал.
Не помню как я избавлялся в прошлые разы от этого глюка, но сейчас так
...
loader.loadClip(thisFotoNode_array[num].toString(), thisFoto);
...

И заработало... А в массиве хранилось значение считанное с xml. Наверное мой тупизм...

Wolsh, что значит код в стиле стимпанк?


Нда, добавилась новая непонятная проблема. Получается, что фото грузится неведомо куда. По-идее в thisFoto, но и ширина и высота равны нулю, и перемещать не получается... В чем теперь то дело может быть?

Wolsh
12.11.2008, 09:53
Wolsh, что значит код в стиле стимпанк?Это когда код представляет из себя красивую смесь из новых удобных методов и классов, и старых "хакерских" подходов к решению, как Ваш onEnterFrame в этом коде. Если просто открыть хелп и почитать все про MovieClipLoader, внимательно посмотреть пример, все будет понято и сделано.