Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Allow smoothing для подгружаемых картинок через xml при помощи цикла (http://www.flasher.ru/forum/showthread.php?t=119586)

Art_133 24.12.2008 16:44

Allow smoothing для подгружаемых картинок через xml при помощи цикла
 
Здравствуйте.
Делаю скрол картинок. Гружу в него картинки через xml циклом.
Но они при анимации коробятся, и плохо выглядят. Думаю allow smoothing исправит ситуацию. Но как это сделать пока немного не ясно. Вот пример:

Код AS1/AS2:

import flash.display.*;
 
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
 
my_xml.load('content.xml');
my_xml.onLoad = function(success:Boolean) {
        if (success) {
                var xml = my_xml.firstChild.childNodes;
                        for (var i = 0; i < xml2.length; i++) {
                        var newX = i * (_root.scrolled.all.block._item._width + space);
                        diplicate = _root.scrolled.all.block._item.duplicateMovieClip('_item' + i, i, {_x:newX});
                        diplicate.mc.loadMovie(xml2[i].attributes.pic);
                        diplicate.lnk = xml2[i].attributes.url;
                        //Здесь по идее код который делает каждую картинку сглаженной. Но вот как толком его применить ума не приложу, по этому пишу как я делаю и как не работает)
                        var bmpData1:BitmapData = new BitmapData(1000, 1000, true, 0x0);
                          bmpData1.draw(diplicate.mc);
                        diplicate.mc.attachBitmap(bmpData1,2,"auto",true);
                        //
                        diplicate.onRelease = function() {
                                getURL(this.lnk, '_blank');
                                trace(this.lnk);                               
                        };
 
                }
 
        } else {
                trace('error');
        }
};

Если вопрос ясен - прошу подсказать.

Wolsh 24.12.2008 18:58

Для начала перестаньте использовать метод из прошлого века loadMovie, и используйте нормальный АС2 MovieClipLoader. Возможно, тогда при отрисовке битмапдаты картинка в отрисовываемый клип уже будет загружена. Сейчас Вы рисуете в битмапдату пустоту.

Art_133 24.12.2008 23:04

Спасибо за совет. Я так понимаю отрисовывать при
Код AS1/AS2:

onLoadInit

?

Вопрос. Создавать MovieClipLoader и слушателя к нему в цикле и там же удалять после загрузки?

dimarik 24.12.2008 23:56

1. Я так понимаю отрисовывать при
Да
2. Создавать MovieClipLoader и слушателя к нему в цикле и там же удалять после загрузки?
Создавать один раз. Вне цикла, естессно. Либо в этом цикле проверять, что ОНО уже создано (это накладнее). Удалять после загрузки всего интересующего контента.

Wolsh 25.12.2008 00:14

1. Да
2. Нет. Создавать перед запуском цикла один лоадер, а листенер вообще не надо создавать - их у Вас полно, можете любой объект использовать как листенер. Обычно используют this.
По-хорошему вообще цикла быть не должно, а должна быть последовательная загрузка (поищите в поиске, тут много раз обсуждалось) - это когда вторая картинка ставится на загрузку только после того, как наступило онЛоадИнит первой картинки. (рекурсия). С этим правда очень важно разобраться и научиться раз и навсегда делать загрузку удобной, со всеми событиями слежения и тп. Посмотрите тут для примера (там не все гладко, но хоть суть уловите) : http://flasher.ru/forum/showpost.php...6&postcount=21

dimarik 25.12.2008 00:18

Wolsh, а в чем проблема грузить сразу по несколько (2-10) ресурсов одновременно? Простейший LoaderQueue справится с этой задачей. Другой вопрос, если внешних ресурсов очень много. Тогда, чтобы предотвратить "лаги" на клиенте, нужно ограничивать количество одновременно грузящихся ресурсов вышеназванным количеством.

Upd: А при чем здесь рекурсия?

Art_133 25.12.2008 02:26

Wolsh Спасибо за наводку. Меня самого напрягает одновременная загрузка картинок циклом.

Добавлено через 11 минут
Цитата:

Сообщение от Wolsh (Сообщение 786226)
1. Да
2. Нет. Создавать перед запуском цикла один лоадер, а листенер вообще не надо создавать - их у Вас полно, можете любой объект использовать как листенер. Обычно используют this.

Если можно покажите пожалуйста простой пример. Немного не ясно как использовать один из присутствующих объектов как слушатель.

Wolsh 25.12.2008 11:47

dimarik - Я раньше делал циклом, причем и лоадеры с листенерами создавал для каждой картинки, и было все замечательно, пока смотришь дома на локале))) Но фишка в том, что браузеры по-разному поддерживают многопоточную загрузку - кто 10 потоков одновременно, кто только пять. Мало того, эту цифру обычно юзер может указать своему браузеру в настройках, и тут уж мы вообще бессильны. Поэтому теперь рекомендую последовательную загрузку, но не настаиваю, решайте сами. По мне так и появляющиеся по-очереди картинки выглядят эстетичнее))) и проще обеспечить упорядоченное расположение на странице, если важен порядок... В общем вот так. А замедление в скорости практически незаметно и даже скрашивается тем, что у Вас постоянно происходит появление нового изображения на сцене, некая динамика))) А не так что минуту ждете, а потом как из ведра полсотни картинок высыпалось, на сцене все прыгает-скачет, перестраиваясь (потому что загружается то третья в пятом ряду, то вторая в первом - в зависимости от веса). Не убедил?)))))
ps Рекурсия в смысле вызова функцией самой себя и в смысле прохода по XML или массиву без помощи цикла. А может и не в тему ляпнул)))) в действительности здесь функция не вызывает сама себя, а только процесс, который приведет к ее вызову))) Вы правы.
Art_133
Код:

var myLoader:MovieClipLoader = new MovieClipLoader();
myLoader.addListener(this);
this.onLoadProgress = displayLoadingProgress;
this.onLoadInit = viewPic;
function displayLoadingProgress (img:MovieClip, bytesLoaded:Number, bytesTotal:Number){......}
function viewPic (img:MovieClip){......}


Art_133 25.12.2008 13:28

Спасибо! Теперь всё ясно.

Добавлено через 2 минуты
Цитата:

Сообщение от Wolsh (Сообщение 786157)
Для начала перестаньте использовать метод из прошлого века loadMovie, и используйте нормальный АС2 MovieClipLoader. Возможно, тогда при отрисовке битмапдаты картинка в отрисовываемый клип уже будет загружена. Сейчас Вы рисуете в битмапдату пустоту.

Есть вопрос. После загрузки всех картинок я отрисовываю клип с этими картинками и дублирую его. А вот мне интересно как себя поведут кнопки. Ведь на этих клипах кнопки ссылки на которые тоже подгружены из xml. Они останутся после отрисовки в битамп?

it32 22.06.2009 18:07

а хмл выложить можно?


Часовой пояс GMT +4, время: 09:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.