Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.12.2008, 16:44
Art_133 вне форума Посмотреть профиль Отправить личное сообщение для Art_133 Посетить домашнюю страницу Art_133 Найти все сообщения от Art_133
  № 1  
Ответить с цитированием
Art_133
 
Аватар для Art_133

блогер
Регистрация: Feb 2007
Адрес: Москва
Сообщений: 538
Записей в блоге: 2
Отправить сообщение для Art_133 с помощью Skype™
По умолчанию 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');
	}
};
Если вопрос ясен - прошу подсказать.

Старый 24.12.2008, 18:58
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Для начала перестаньте использовать метод из прошлого века loadMovie, и используйте нормальный АС2 MovieClipLoader. Возможно, тогда при отрисовке битмапдаты картинка в отрисовываемый клип уже будет загружена. Сейчас Вы рисуете в битмапдату пустоту.
__________________
Reality.getBounds(this);

Старый 24.12.2008, 23:04
Art_133 вне форума Посмотреть профиль Отправить личное сообщение для Art_133 Посетить домашнюю страницу Art_133 Найти все сообщения от Art_133
  № 3  
Ответить с цитированием
Art_133
 
Аватар для Art_133

блогер
Регистрация: Feb 2007
Адрес: Москва
Сообщений: 538
Записей в блоге: 2
Отправить сообщение для Art_133 с помощью Skype™
Спасибо за совет. Я так понимаю отрисовывать при
Код AS1/AS2:
onLoadInit
?

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

Старый 24.12.2008, 23:56
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
1. Я так понимаю отрисовывать при
Да
2. Создавать MovieClipLoader и слушателя к нему в цикле и там же удалять после загрузки?
Создавать один раз. Вне цикла, естессно. Либо в этом цикле проверять, что ОНО уже создано (это накладнее). Удалять после загрузки всего интересующего контента.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 25.12.2008, 00:14
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

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

Старый 25.12.2008, 00:18
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Wolsh, а в чем проблема грузить сразу по несколько (2-10) ресурсов одновременно? Простейший LoaderQueue справится с этой задачей. Другой вопрос, если внешних ресурсов очень много. Тогда, чтобы предотвратить "лаги" на клиенте, нужно ограничивать количество одновременно грузящихся ресурсов вышеназванным количеством.

Upd: А при чем здесь рекурсия?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 25.12.2008 в 00:22.
Старый 25.12.2008, 02:26
Art_133 вне форума Посмотреть профиль Отправить личное сообщение для Art_133 Посетить домашнюю страницу Art_133 Найти все сообщения от Art_133
  № 7  
Ответить с цитированием
Art_133
 
Аватар для Art_133

блогер
Регистрация: Feb 2007
Адрес: Москва
Сообщений: 538
Записей в блоге: 2
Отправить сообщение для Art_133 с помощью Skype™
Wolsh Спасибо за наводку. Меня самого напрягает одновременная загрузка картинок циклом.

Добавлено через 11 минут
Цитата:
Сообщение от Wolsh Посмотреть сообщение
1. Да
2. Нет. Создавать перед запуском цикла один лоадер, а листенер вообще не надо создавать - их у Вас полно, можете любой объект использовать как листенер. Обычно используют this.
Если можно покажите пожалуйста простой пример. Немного не ясно как использовать один из присутствующих объектов как слушатель.

Старый 25.12.2008, 11:47
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
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){......}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 25.12.2008 в 12:03.
Старый 25.12.2008, 13:28
Art_133 вне форума Посмотреть профиль Отправить личное сообщение для Art_133 Посетить домашнюю страницу Art_133 Найти все сообщения от Art_133
  № 9  
Ответить с цитированием
Art_133
 
Аватар для Art_133

блогер
Регистрация: Feb 2007
Адрес: Москва
Сообщений: 538
Записей в блоге: 2
Отправить сообщение для Art_133 с помощью Skype™
Спасибо! Теперь всё ясно.

Добавлено через 2 минуты
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Для начала перестаньте использовать метод из прошлого века loadMovie, и используйте нормальный АС2 MovieClipLoader. Возможно, тогда при отрисовке битмапдаты картинка в отрисовываемый клип уже будет загружена. Сейчас Вы рисуете в битмапдату пустоту.
Есть вопрос. После загрузки всех картинок я отрисовываю клип с этими картинками и дублирую его. А вот мне интересно как себя поведут кнопки. Ведь на этих клипах кнопки ссылки на которые тоже подгружены из xml. Они останутся после отрисовки в битамп?

Старый 22.06.2009, 18:07
it32 вне форума Посмотреть профиль Отправить личное сообщение для it32 Найти все сообщения от it32
  № 10  
Ответить с цитированием
it32

Регистрация: May 2009
Сообщений: 7
а хмл выложить можно?

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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