PDA

Просмотр полной версии : Загрузить из сети МНОГО Jpegов


styx
09.06.2004, 17:56
Много - это порядка сотни и больше. Причём совершенно необходимо в каждый момент времени знать, какие уже подгрузились, а какие - нет. Можно, конечно, в каждом фрейме в цикле проходить по всем мувикам и проверять их _width - но это же сколько ресурсов съест... Нет ли более корректного решения?

Dindin
10.06.2004, 23:37
Ну как же, есть. Создаешь флаговый ассоциированный массив, в котором в качестве индексов - названия мувиклипов, а все значения по умолчанию - false. И при загрузке мувиклипа меняешь значение на "true". Поиск в массиве - либо по индексам, либо по значениям переменных. Вот и всё.

styx
15.06.2004, 16:05
Это-то само-сабой. Только вот как отследить факт загрузки картинки, кроме как проверкой _width, скажем? Ведь чтобы заполнить этот массив, мне надо откуда-то знать, какие объекты уже загружены?

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

Nucer
15.06.2004, 18:33
Object.watch не подойдёт?

Елё
15.06.2004, 18:34
Ну во первых для фотогалереи не надо подгружать все jpeg-и.
100 jpg этож мегабайта 3 наверное...

Ну а во вторых можно переопределить onLoad - который работает если предварительно включить следующий код:

дзынь (http://chattyfig.figleaf.com/flashcoders-wiki/index.php?onLoad)

styx
15.06.2004, 21:50
Про object.watch - а разве должен помочь? Потому как такие свойства, как _width или _x, он, если верить доке, не поддерживает...

Про копание с прототипами... это интересная мысль! Спасибо, попробую. Правда, смутила фраза, что при тестировании в шестёрке не сработало... Ну да поглядим.

А надо ли все подгружать... Имеются в виду превьюшки 100х100, конечно, а подгружать их надо :) В конце концов, если пользователь не согласен с таким подходом, он всегда сможет это отменить.

Usnul
16.06.2004, 02:20
я бы предложил составить список в виде текстовика вроде:
&pic1=bla.jpg&
&pic2=bla2.jpg&
&pic3=.... и т.д.
затем этот списочек грузонуть с помощью клипа все по очеряди загрузить вроде этого:
_root.i=0
clip.onEnterFrame=function(){
if(_root["pic"+i]==undefined or _root["pic"+i].getBytesLoaded()==_root["pic"+i].getBytesTotal()){
_root.i++
_root.createEmptyMovieClip("pic"+_root.i,_root.i);
_root["pic"+_root.i].loadMovie(_root.pix["pic"+_root.i]);
}
}
башка что-то плохо варит, но надеюсь написанное выше дало какую-то идею =)

styx
16.06.2004, 14:16
Собственно, так сейчас оно и сделано. Только список грузится из XML... Точнее, будет грузиться, когда студенты напишут скрипт, который из MySQL этот самый XML сделает :) Меня смущает в этом подходе одно - а что будет, если один из файлов не сможет загрузиться? Цепочка остановится :( Вот и пытаюсь понять, как бы так сделать, чтобы одиночные сбои не влияли на всю систему...

styx
16.06.2004, 14:21
Хотя стоп... Или вот эта проверка - _root["pic"+i]==undefined - как раз на эту ошибку? Или это просто для инициации первой загрузки написано? Вообще, можно ли как-то отследить ошибку loadMovie?

Елё
16.06.2004, 16:05
в 2004 есть MovieClipLoader который имеет onError
вообще и без него как то ошибка идентифицируется... По моему getBytesTotal() == 0 при ошибке. Точно не помню

styx
16.06.2004, 17:17
Добавление onLoad в прототип помогло! Но в случае ошибки оно не вызывается. Так что, видать, придётся на семёрку переходить.

Usnul
16.06.2004, 21:54
я бы написал свою систему отловки ошибок =)
люблю с кодом возиться. Короче так, как только начинается загрузка файлика, мы создаем счетчик, и если файл незагрежен по истечению установленного интервала, удалить клип вообще или просто прервать загрузку (это сложнее), такой подход был бы более грамотным на мой взгляд, так как у людей с модемом все еще бывают такие фишки что что-то очень долго грузится и по 30 секунд не подает никаких признаков жизни =) Хотя кому что удобнее..

Nucer
17.06.2004, 01:22
Может я конечно чего то не понимаю, но о чём вообще разговор? Есть класс MovieClipLoader (даже в MX вроде), и там есть события onLoadError и onLoadComplete...

styx
17.06.2004, 20:54
В MX класса такого нет.

А насчёт своей системы отлова ошибок я долго размышлял... и решил оставить размышление тем, кто работает на Б.Г. (Bill Gates) и тому подобных. В конце концов, протокол HTTP на то и придуман, чтобы не приходилось на уровне приложений ошибки ловить.

Но на самом деле смущает меня именно проблема плохих (медленных, в первую очередь) соединений. Какой таймаут можно считать приемлемым - 5, 10, 20, 40, 60 секунд? Я делал чат с пушем от сервера - сервер должен был присылать пустой пакет раз в минуту, если сообщений нет, и через минуту клиент сам стучался к серверу и писал пользователю, что соединение утеряно - это нормально, imho. А сколько ждать начала загрузки картинки? Как-то я опасаюсь получить код, который будет или безумно тормозить при реальных ошибках, или находить ошибки там, где их нет.

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

Nucer
18.06.2004, 02:16
Странно, 2004-й жёлтым не выделяёт этот класс...
P.S. Слушай, ты этот свой чат на флэше делал?

Dindin
18.06.2004, 11:33
MovieClipLoader class
Availability
Flash Player 7.

Description
This class lets you implement listener callbacks that provide status information while SWF or JPEG files are being loaded (downloaded) into movie clips. To use MovieClipLoader features, use MovieClipLoader.loadClip() instead of loadMovie() or MovieClip.loadMovie() to load SWF files.

styx
18.06.2004, 13:52
Слушай, ты этот свой чат на флэше делал?
На HTMLе + жабий скрипт + PHP + MySQL :). Пуш, конечно, в этом сочетании псевдо - потому как на самом коннект висит до тех пор, пока на сервере не появятся новые данные, а серверный скрипт каждую секунду опрашивает MySQL на предмет этих самых данных... Для большого проекта не пойдёт, конечно; мне больше интересна была сама возможность сделать подобный финт ушами...

Nucer
18.06.2004, 22:40
Жалко :)

Dindin
19.06.2004, 15:21
Э-э-э-э... сорри конечно, но зачем такие динамично меняющиеся данные, как посты в чате в базу заносить? Если у тебя штук 50 пользователей будет база не сдохнет как наша корова?

Nucer
19.06.2004, 17:01
Ну это смотря какой хостинг, если за пять баксов, то сдохнет и от 10-15 юзеров

styx
22.06.2004, 18:21
Ещё раз повторю - это проект экспериментальный. А куда их заносить, в shared memory? Так я на Виндах делал...