Sneg
09.11.2005, 19:05
Добрый вечер, столкнулся с проблемой загрузки большого кол-ва разных данных. Ситуация примерно такая, у нас существует произовольное кол-во различных объектов которые грузятся из вне: объект в данном контексте - такая вещь которая грузит в себя данные (это MovieClip, XML и т.п.). Причем кол-во этих элементов мне не известно - мне его возвращает серверный скрипт. Задача сделать грамотный и универсальный прелоадер.
Вижу два пути:
1) наследовать все классы которые принимают или могут в себя принимать данные от какого-то абстрактного класса типа LoadListener, который содержит метод isLoad() и переменные isReady, которые соотвественно дергаются при событии onLoad у XML или onLoadInit у MovieClipLoader. И переопределять эти методы, т.е. объясню на примере:
Есть клавиатура class Keyboard, у неё есть много кнопок (сколько - не занаю) class Keybutton, каждая кнопка загружает в себя фон (внешний swf) и фон когда мышка над ней наведена (тоже внешний swf), как только они загрузятся вызовется isLoad() класса Keybutton, который сскажет Keyboard, что все кнопки готовы и загружены. В свою очередь, Keyboard должна отследить что все её кнопки готовы и загружен еще фон для Keyboard - только после этого дернется метод isLoad(). А клавиатура может находиться еще в экземпляре класса Window, который еще помимо этой клавиатуры содержит тучу других объектов, которые в себя тоже что-то грузят - значит он должен их всех тоже мониторить и т.п. Это очень трудоемкий способ, начал я его было реализовывать - отнимает много времени, неподходит.
2) На ум пришел другой способ, проще, но возможно бредовый. Каждый объект кто чего-то грузит в себя - говорит стратическому классу Preloader что он грузит в себя n-байтов getBytesTotal() и вообще о том что он есть. А потом в процессе, какой нибудь setInterval опрашивает все эти объекты на getBytesTotal() и getBytesLoaded() - плюсует их все. И показывает единый статус бар, а как только кол-во всех данных сравнялось с кол-во загруженных, убирает маску или там фон который это все дело прятал.
Хотелось бы узнать не делал ли кто либо чего-то похожего и не поделится ли опытом.
Заранее спасибо Вам за ответы.
Вижу два пути:
1) наследовать все классы которые принимают или могут в себя принимать данные от какого-то абстрактного класса типа LoadListener, который содержит метод isLoad() и переменные isReady, которые соотвественно дергаются при событии onLoad у XML или onLoadInit у MovieClipLoader. И переопределять эти методы, т.е. объясню на примере:
Есть клавиатура class Keyboard, у неё есть много кнопок (сколько - не занаю) class Keybutton, каждая кнопка загружает в себя фон (внешний swf) и фон когда мышка над ней наведена (тоже внешний swf), как только они загрузятся вызовется isLoad() класса Keybutton, который сскажет Keyboard, что все кнопки готовы и загружены. В свою очередь, Keyboard должна отследить что все её кнопки готовы и загружен еще фон для Keyboard - только после этого дернется метод isLoad(). А клавиатура может находиться еще в экземпляре класса Window, который еще помимо этой клавиатуры содержит тучу других объектов, которые в себя тоже что-то грузят - значит он должен их всех тоже мониторить и т.п. Это очень трудоемкий способ, начал я его было реализовывать - отнимает много времени, неподходит.
2) На ум пришел другой способ, проще, но возможно бредовый. Каждый объект кто чего-то грузит в себя - говорит стратическому классу Preloader что он грузит в себя n-байтов getBytesTotal() и вообще о том что он есть. А потом в процессе, какой нибудь setInterval опрашивает все эти объекты на getBytesTotal() и getBytesLoaded() - плюсует их все. И показывает единый статус бар, а как только кол-во всех данных сравнялось с кол-во загруженных, убирает маску или там фон который это все дело прятал.
Хотелось бы узнать не делал ли кто либо чего-то похожего и не поделится ли опытом.
Заранее спасибо Вам за ответы.