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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.03.2009, 15:04
tikhop вне форума Посмотреть профиль Отправить личное сообщение для tikhop Найти все сообщения от tikhop
  № 11  
Ответить с цитированием
tikhop

Регистрация: Jul 2006
Сообщений: 170
Не буду создавать новую тему, опишу свою проблему в этой теме...

Есть цикл который обрабатывает xml и создает комментарии:

Код AS3:
for each(var item:XML in _commentLoader.comments.children())
{
 
	var msg:String=item.toString();
 
	var userName:String=item.@user_name;
 
	var date:String=item.@date;
 
	var lvl:String=lvl;
 
	var avatar:String=item.@avatar;
 
	var pic:String=item.@pic;
 
 
	var mes:MessagePattern=new MessagePattern(userName, date, lvl, avatar, pic, msg);
	_commentsContainer.addChild(mes);
 
	trace("prevMesHeight", mes.height); // всегда выводит стандартный размер (не измененный, хотя он меняется) 	
 
	trace("///////////////////////////////");
 
}
Вот класс MessagePattern:

Код AS3:
........
public function MessagePattern(userName:String, date:String, lvl:String, avatar:String, pic:String, msg:String)
{
	super();
 
        .......
 
        _messageField=new TextField();
        addChild(_messageField);
        _messageField.x=9;
        _messageField.y=43;
	_messageField.width=278;
	_messageField.height=0;
	_messageField.autoSize="left";
	_messageField.border=true;
	_messageField.wordWrap=true;
	_messageField.text=msg;
 
        trace("_messageField.textHeight", _messageField.textHeight); //Всегда выводит 12, хотя должны быть всегда разные значения...
 
}
Мне нужно добиться, чтоб trace("_messageField.textHeight", _messageField.textHeight); показывал правильное значение и после чего добовлять комментарий (MessagePattern) в контейнер ( _commentsContainer.addChild(mes); ), какая должна быть логика?

Просто странно, если написать такой код, то трайс всегда показывает верное значение:

Код AS3:
var tf:TextField=new TextField();
tf.autoSize="left";
tf.width=100;
tf.multiline=true;
tf.wordWrap=true;
tf.text="dkskfldskl fk;dlskf l;dskl;f kdsl;kfl ;dskl;f kdls;kf l;dskfl;kdsl; kfl;dskf l;kds l;fkl;dskfldskf;ldskf;";
var s:Sprite=new Sprite();
//s.addChild(tf);
//addChild(s);
trace(tf.textHeight); трайс всегда показывает верное значение
Добавлено через 11 часов 16 минут
проблема решилась после того как я убрал одну строчку _messageField.height=0;

Старый 02.04.2009, 20:57
Roma84 вне форума Посмотреть профиль Отправить личное сообщение для Roma84 Найти все сообщения от Roma84
  № 12  
Ответить с цитированием
Roma84
 
Аватар для Roma84

Регистрация: Apr 2008
Сообщений: 17
А что посоветуете если все-таки надо отображать одновременно много спрайтов? До ~1000 все нормально, при большем количестве начинаются тормоза при перемещении/масштабировании. cacheAsBitmap помогает избежать проблем при перемещении, но зато масштабирование очень сильно начинает тормозить.

Старый 03.04.2009, 00:58
Dimonte вне форума Посмотреть профиль Отправить личное сообщение для Dimonte Найти все сообщения от Dimonte
  № 13  
Ответить с цитированием
Dimonte

Регистрация: Jun 2008
Сообщений: 51
Roma84, я бы посоветовал как-нибудь отказаться от масштабирования. Если не получится со всеми объектами, хотя бы часть их оставляйте без трансформаций. Отрисовать тысячу спрайтов с трансформациями флеш плееру, конечно, под силу в теории, но на практике не стоит.

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

Регистрация: Apr 2008
Сообщений: 17
Цитата:
Сообщение от Dimonte Посмотреть сообщение
Roma84, я бы посоветовал как-нибудь отказаться от масштабирования. Если не получится со всеми объектами, хотя бы часть их оставляйте без трансформаций. Отрисовать тысячу спрайтов с трансформациями флеш плееру, конечно, под силу в теории, но на практике не стоит.
К сожалению нельзя отказаться от масштабирования, более того там еще и вращение/поворот идет.
Получается пока выход один - ограничивать количество одновременно видимых спрайтов. Ну или дождаться версии флеш-плеера, которая будет использовать ресурсы видеокарты.

Старый 04.04.2009, 17:47
marat_sa вне форума Посмотреть профиль Отправить личное сообщение для marat_sa Посетить домашнюю страницу marat_sa Найти все сообщения от marat_sa
  № 15  
Ответить с цитированием
marat_sa
 
Аватар для marat_sa

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
А как лучше все эти объекты хранить?
Ведь можно хранить просто массив объектов, расширяющих Sprite, которые по мере надобности сразу добавляются в список отображения.
А можно сделать просто абстрактный мини-класс с самыми необходимыми полями, ну там текст, ширина, высота и т.д. А потом при отображении брать из списка этот мини-объект, из него делать уже наследника DisplayObject и добавлять, собственно, на сцену.
Как лучше и быстрее при работе с большим кол-вом элементов >1000?
__________________
Стой! Опасная зона! Работа мозга!

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

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
Создаётся форум я так понял? 8)
Код AS3:
trace("prevMesHeight", mes.height);
Как-то не понятно, вы пытаетесь получить высоту класса, может стоит конкретизировать на видимый объект.

Старый 04.04.2009, 18:12
Dimonte вне форума Посмотреть профиль Отправить личное сообщение для Dimonte Найти все сообщения от Dimonte
  № 17  
Ответить с цитированием
Dimonte

Регистрация: Jun 2008
Сообщений: 51
marat_sa, делать что-то из чего-то на ходу - не лучший вариант. Тем более, когда много объектов. Вы лучше делайте свои классы наследниками Sprite'ов (или чего вам там надо отображать), а уже в список объектов сцены их добавляйте по мере надобности.

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

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
tikhop, трассируйте входящее значение msg у функции MessagePattern, если оно не ровно 12 тогда понятно. Есть ещё свойство length которое показывает количество символов в строке


Последний раз редактировалось willis83; 04.04.2009 в 19:53.
Старый 04.04.2009, 19:51
marat_sa вне форума Посмотреть профиль Отправить личное сообщение для marat_sa Посетить домашнюю страницу marat_sa Найти все сообщения от marat_sa
  № 19  
Ответить с цитированием
marat_sa
 
Аватар для marat_sa

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
Dimonte, но в то же время 1 Sprite ест больше памяти, чем 1 объект класса с 5-6 свойствами...
__________________
Стой! Опасная зона! Работа мозга!

Старый 05.04.2009, 01:21
Dimonte вне форума Посмотреть профиль Отправить личное сообщение для Dimonte Найти все сообщения от Dimonte
  № 20  
Ответить с цитированием
Dimonte

Регистрация: Jun 2008
Сообщений: 51
marat_sa, тут уж все зависит от конкретного проекта. Если в вашем случае Sprite-объекты будут занимать слишком много памяти, то, конечно, надо по-другому делать. Если графика во многих спрайтах одинаковая, можно очень серьезно урезать использование памяти кэшированием. Если у вас появляются и исчезают с активного вида объекты редко, выигрыш в скорости от хранения объектов спрайтами будет ничтожен. Лучше всего, сделайте тесты с обоими вариантами и там уже смотрите, что лучше работает в вашем случае.

UPD: Совсем забыл, если ваши объекты не должны содержать другие объекты и реагировать на мышь, то можете вместо спрайтов расширять класс Shape, он заметно меньше памяти кушает.


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

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

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


 


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


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