![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Oct 2009
Сообщений: 5
|
Здравствуйте. Мне необходимо подгрузить из XML файла несколько изображений, причем процесс загрузки показать не для каждого изображения отдельно, а общим прелоадером. Добавил несколько "loadClip" для одного "addListener", но загрузка идет некорректно, когда первая картинка подгружается, счетчик исчезает и вторая грузиться уже без прелоадера. Подскажите, можно ли исправить код внеся небольшие коррективы, если да, то какие?
var mcLoader:MovieClipLoader = new MovieClipLoader(); var listener:Object = new Object(); var container:XML = new XML(); container.ignoreWhite = true; container.load("data.xml"); container.onLoad = function(success) { listener.onLoadStart = function():Void { preloader_txt.text = "0%"; } listener.onLoadError = function(clip:MovieClip, message:String):Void { if (message == "URLNotFound") { preloader_txt.text = "Ссылка не найдена"; } if (message == "LoadNeverCompleted") { preloader_txt.text = "Ошибка загрузки"; } } listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void { X=Math.round(bytesLoaded/bytesTotal*100)+"%"; } listener.onLoadComplete = function():Void { preloader_txt._visible = false; } mcLoader.addListener(listener); mcLoader.loadClip(container.firstChild.childNodes[0].attributes.link, mc_img02.mc_color); mcLoader.loadClip(container.firstChild.childNodes[1].attributes.link, mc_img01.mc_color); } |
|
|||||
|
Модрон-ветеринар
|
"Слушатель" добавляется к экземпляру "MovieClipLoader", а не к слушателю "мувиклипы".
Без понимания работы MovieClipLoader продвигаться дальше будет бессмысленно. Применительно к вашему случаю: Один экземпляр MovieClipLoader. Один набор обработчиков. Один слушатель. И несколько loadClip. - Да, можно и нужно. (Сделайте аналогично http://www.flasher.ru/forum/showpost...12&postcount=5) Попробуйте так: var mcLoader:MovieClipLoader = new MovieClipLoader(); var listener:Object = new Object(); listener.onLoadStart = function():Void { preloader_txt.text = "0%"; }; listener.onLoadError = function(clip:MovieClip, message:String):Void { if (message == "URLNotFound") { preloader_txt.text = "Ссылка не найдена"; } if (message == "LoadNeverCompleted") { preloader_txt.text = "Ошибка загрузки"; } }; listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void { X=Math.round(bytesLoaded/bytesTotal*100)+"%"; }; listener.onLoadComplete = function():Void { preloader_txt._visible = false; }; var container:XML = new XML(); container.ignoreWhite = true; container.onLoad = function(success) { mcLoader.addListener(listener); mcLoader.loadClip(container.firstChild.childNodes[0].attributes.link, mc_img02.mc_color); mcLoader.loadClip(container.firstChild.childNodes[1].attributes.link, mc_img01.mc_color); }; container.load("data.xml"); Последний раз редактировалось mooncar; 22.10.2009 в 21:25. |
|
|||||
|
.
|
var preloader_txt: TextField; var mcLoader: MovieClipLoader = new MovieClipLoader(); this.mcLoader.addListener(this); var _loaders: Object = new Object(); var _queue: Array = new Array(); // also we have the map table [link] --> [mc] var map:Object = { link_1 : "mc_img01.mc_color", link_2 : "mc_img02.mc_color", link_3 : "mc_img03.mc_color", }; var container:XML = new XML(); this.container.ignoreWhite = true; this.container.onLoad = function(success:Boolean):Void { if (!success) { trace("Ooops!"); return; } var doc: XMLNode= this.firstChild; var node: XMLNode; var ea: Object; /* node attributes*/ while (node = doc.firstChild) { ea = node.attributes; addToQueue(ea['link'], map[ea['link']]); // remove useless node node.removeNode(); } startLoad(); }; this.container.load("data.xml"); //--------------------------------------------------------- // // Events handlers: MovieClipLoader // //--------------------------------------------------------- function startLoad():Void { var maxConn: Number = this.getMaximumConnections(); var queue: Array = this._queue.splice(0, maxConn); var assets: Array; while (queue.length) { assets = queue.shift(); this.mcLoader.loadClip(assets[0]/* url */, assets[1]/* target */); } } function updateProgress():Void { // Init overall progress counters var queueBytesLoaded: Number = 0; var queueBytesTotal: Number = 0; var loaderInfo: Object; for (var i:String in this._loaders) { // read next loaderInfo object; loaderInfo = this._loaders[i]; queueBytesLoaded += loaderInfo.bytesLoaded; queueBytesTotal += loaderInfo.bytesTotal; } // Update indicator // Better way is to dispatch Event.PROGRESS_EVENT event instead this.preloader_txt.text = Math.round(queueBytesLoaded / queueBytesTotal * 100)+"%"; } //--------------------------------------------------------- // // Events handlers: MovieClipLoader // //--------------------------------------------------------- function onLoadStart(target:MovieClip):Void { // Reset indicator if new queue of downloads begin if (this._loaders.length == 0) { this.preloader_txt._visible = true; this.preloader_txt.text = "0%"; } var loaderID:String = this.generateUID(); // Ensure what we have only unique ID while (this._loaders[loaderID]) { loaderID = this.generateID(); } // Init loaderInfo for the target var loaderInfo:Object = new Object(); loaderInfo.target = target; loaderInfo.bytesLoaded = 0; loaderInfo.bytesTotal = 0; this._loaders[loaderID] = loaderInfo; } function onLoadProgress(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void { var loaderInfo: Object; for (var i:String in this._loaders) { // read next loaderInfo object; loaderInfo = this._loaders[i]; // we found appropriate loader info // update profress info for it if (loaderInfo.target == target) { loaderInfo.bytesLoaded = bytesLoaded; loaderInfo.bytesTotal = bytesTotal; // No needs to continue break; } } // Well, go update overall progress this.updateProgress(); } function onLoadError(target:MovieClip, message:String):Void { var loaderInfo: Object; for (var i:String in this._loaders) { loaderInfo = this._loaders[i]; if (loaderInfo.target == target) { // remove useless loaderInfo delete this._loaders[i]; // Update overall progress this.updateProgress(); break; } } if (message == "URLNotFound") { preloader_txt.text = "Ссылка не найдена"; } if (message == "LoadNeverCompleted") { preloader_txt.text = "Ошибка загрузки"; } } function onLoadComplete(target_mc:MovieClip):Void { var loaderInfo: Object; for (var i:String in this._loaders) { loaderInfo = this._loaders[i]; if (loaderInfo.target == target) { // remove completed loaderInfo delete this._loaders[i]; this.updateProgress(); break; } } // load pending item if (this._queue.length) { var asset:Array = this._queue.shift(); this.mcLoader.loadClip(asset[0]/* url */, asset[1] /* target */); } else { // job done! say cya to indicator // But dispatch Event.COMPLETE event is better! this.preloader_txt._visible = false; } } //--------------------------------------------------------- // // Helper functions // //--------------------------------------------------------- // determines number of maximum simultaneous loadings function getMaximumConnections():Number { // For simplify we decide the max connections depends of: return _root._url.indexOf("file://") == 0 ? 10 : 3; } // add to loading queue function addToQueue(url:String, target:MovieClip):Void { if (!url || typeof target != 'movieclip') return; this._queue.push( [url, target] ); } // generate unique ID function generateID():String { return String( Math.floor(Math.random() * 1e6) ); } Последний раз редактировалось dimarik; 23.10.2009 в 02:12. |
|
|||||
|
Регистрация: Oct 2009
Сообщений: 5
|
Цитата:
dimarik К сожалению заставить работать код не вышло, исправил пару строк, которые выдавали ошибки, но безрезультатно. Неужели нужно прикручивать к флешке такой большой сценарий, только что бы заработал прелоадер? Если честно, я не гонюсь за гибкостью в работе сценария и не хочу предусматривать все возможные ситуации его работы. |
|
|||||
|
Регистрация: Oct 2009
Сообщений: 5
|
Залил архив со всеми файлами, на 27% работа предоадера обрывается, помогите пожалуйста
![]() |
|
|||||
|
.
|
Ваше текстовое поле становится невидимым после загрузки первой картинки:
Если Вы подумали, что прогресс загрузки здесь общий, то спешу Вас разочаровать: |
|
|||||
|
Регистрация: Oct 2009
Сообщений: 5
|
Цитата:
Цитата:
|
|
|||||
|
Цитата:
|
|
|||||
|
Регистрация: Oct 2009
Сообщений: 5
|
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 06:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|