Просмотр полной версии : Загрузить из сети МНОГО Jpegов
Много - это порядка сотни и больше. Причём совершенно необходимо в каждый момент времени знать, какие уже подгрузились, а какие - нет. Можно, конечно, в каждом фрейме в цикле проходить по всем мувикам и проверять их _width - но это же сколько ресурсов съест... Нет ли более корректного решения?
Ну как же, есть. Создаешь флаговый ассоциированный массив, в котором в качестве индексов - названия мувиклипов, а все значения по умолчанию - false. И при загрузке мувиклипа меняешь значение на "true". Поиск в массиве - либо по индексам, либо по значениям переменных. Вот и всё.
Это-то само-сабой. Только вот как отследить факт загрузки картинки, кроме как проверкой _width, скажем? Ведь чтобы заполнить этот массив, мне надо откуда-то знать, какие объекты уже загружены?
А так исходно идея такая и есть - показывать фотогалерею в том порядке, в котором картинки пришли от сервера, для чего и будет формироваться такой массив.
Object.watch не подойдёт?
Ну во первых для фотогалереи не надо подгружать все jpeg-и.
100 jpg этож мегабайта 3 наверное...
Ну а во вторых можно переопределить onLoad - который работает если предварительно включить следующий код:
дзынь (http://chattyfig.figleaf.com/flashcoders-wiki/index.php?onLoad)
Про object.watch - а разве должен помочь? Потому как такие свойства, как _width или _x, он, если верить доке, не поддерживает...
Про копание с прототипами... это интересная мысль! Спасибо, попробую. Правда, смутила фраза, что при тестировании в шестёрке не сработало... Ну да поглядим.
А надо ли все подгружать... Имеются в виду превьюшки 100х100, конечно, а подгружать их надо :) В конце концов, если пользователь не согласен с таким подходом, он всегда сможет это отменить.
я бы предложил составить список в виде текстовика вроде:
&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]);
}
}
башка что-то плохо варит, но надеюсь написанное выше дало какую-то идею =)
Собственно, так сейчас оно и сделано. Только список грузится из XML... Точнее, будет грузиться, когда студенты напишут скрипт, который из MySQL этот самый XML сделает :) Меня смущает в этом подходе одно - а что будет, если один из файлов не сможет загрузиться? Цепочка остановится :( Вот и пытаюсь понять, как бы так сделать, чтобы одиночные сбои не влияли на всю систему...
Хотя стоп... Или вот эта проверка - _root["pic"+i]==undefined - как раз на эту ошибку? Или это просто для инициации первой загрузки написано? Вообще, можно ли как-то отследить ошибку loadMovie?
в 2004 есть MovieClipLoader который имеет onError
вообще и без него как то ошибка идентифицируется... По моему getBytesTotal() == 0 при ошибке. Точно не помню
Добавление onLoad в прототип помогло! Но в случае ошибки оно не вызывается. Так что, видать, придётся на семёрку переходить.
я бы написал свою систему отловки ошибок =)
люблю с кодом возиться. Короче так, как только начинается загрузка файлика, мы создаем счетчик, и если файл незагрежен по истечению установленного интервала, удалить клип вообще или просто прервать загрузку (это сложнее), такой подход был бы более грамотным на мой взгляд, так как у людей с модемом все еще бывают такие фишки что что-то очень долго грузится и по 30 секунд не подает никаких признаков жизни =) Хотя кому что удобнее..
Может я конечно чего то не понимаю, но о чём вообще разговор? Есть класс MovieClipLoader (даже в MX вроде), и там есть события onLoadError и onLoadComplete...
В MX класса такого нет.
А насчёт своей системы отлова ошибок я долго размышлял... и решил оставить размышление тем, кто работает на Б.Г. (Bill Gates) и тому подобных. В конце концов, протокол HTTP на то и придуман, чтобы не приходилось на уровне приложений ошибки ловить.
Но на самом деле смущает меня именно проблема плохих (медленных, в первую очередь) соединений. Какой таймаут можно считать приемлемым - 5, 10, 20, 40, 60 секунд? Я делал чат с пушем от сервера - сервер должен был присылать пустой пакет раз в минуту, если сообщений нет, и через минуту клиент сам стучался к серверу и писал пользователю, что соединение утеряно - это нормально, imho. А сколько ждать начала загрузки картинки? Как-то я опасаюсь получить код, который будет или безумно тормозить при реальных ошибках, или находить ошибки там, где их нет.
Так что, коли в семёрке есть нужные события - да здравствует прогресс!
Странно, 2004-й жёлтым не выделяёт этот класс...
P.S. Слушай, ты этот свой чат на флэше делал?
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.
Слушай, ты этот свой чат на флэше делал?
На HTMLе + жабий скрипт + PHP + MySQL :). Пуш, конечно, в этом сочетании псевдо - потому как на самом коннект висит до тех пор, пока на сервере не появятся новые данные, а серверный скрипт каждую секунду опрашивает MySQL на предмет этих самых данных... Для большого проекта не пойдёт, конечно; мне больше интересна была сама возможность сделать подобный финт ушами...
Э-э-э-э... сорри конечно, но зачем такие динамично меняющиеся данные, как посты в чате в базу заносить? Если у тебя штук 50 пользователей будет база не сдохнет как наша корова?
Ну это смотря какой хостинг, если за пять баксов, то сдохнет и от 10-15 юзеров
Ещё раз повторю - это проект экспериментальный. А куда их заносить, в shared memory? Так я на Виндах делал...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.