![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2006
Сообщений: 170
|
Не буду создавать новую тему, опишу свою проблему в этой теме...
Есть цикл который обрабатывает xml и создает комментарии: 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("///////////////////////////////"); } ........ 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, хотя должны быть всегда разные значения... } Просто странно, если написать такой код, то трайс всегда показывает верное значение: 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); трайс всегда показывает верное значение проблема решилась после того как я убрал одну строчку _messageField.height=0; |
|
|||||
|
Регистрация: Apr 2008
Сообщений: 17
|
А что посоветуете если все-таки надо отображать одновременно много спрайтов? До ~1000 все нормально, при большем количестве начинаются тормоза при перемещении/масштабировании. cacheAsBitmap помогает избежать проблем при перемещении, но зато масштабирование очень сильно начинает тормозить.
|
|
|||||
|
Регистрация: Jun 2008
Сообщений: 51
|
Roma84, я бы посоветовал как-нибудь отказаться от масштабирования. Если не получится со всеми объектами, хотя бы часть их оставляйте без трансформаций. Отрисовать тысячу спрайтов с трансформациями флеш плееру, конечно, под силу в теории, но на практике не стоит.
|
|
|||||
|
Регистрация: Apr 2008
Сообщений: 17
|
Цитата:
Получается пока выход один - ограничивать количество одновременно видимых спрайтов. Ну или дождаться версии флеш-плеера, которая будет использовать ресурсы видеокарты. |
|
|||||
|
А как лучше все эти объекты хранить?
Ведь можно хранить просто массив объектов, расширяющих Sprite, которые по мере надобности сразу добавляются в список отображения. А можно сделать просто абстрактный мини-класс с самыми необходимыми полями, ну там текст, ширина, высота и т.д. А потом при отображении брать из списка этот мини-объект, из него делать уже наследника DisplayObject и добавлять, собственно, на сцену. Как лучше и быстрее при работе с большим кол-вом элементов >1000?
__________________
Стой! Опасная зона! Работа мозга! |
|
|||||
|
Создаётся форум я так понял? 8)
Как-то не понятно, вы пытаетесь получить высоту класса, может стоит конкретизировать на видимый объект. |
|
|||||
|
Регистрация: Jun 2008
Сообщений: 51
|
marat_sa, делать что-то из чего-то на ходу - не лучший вариант. Тем более, когда много объектов. Вы лучше делайте свои классы наследниками Sprite'ов (или чего вам там надо отображать), а уже в список объектов сцены их добавляйте по мере надобности.
|
|
|||||
|
tikhop, трассируйте входящее значение msg у функции MessagePattern, если оно не ровно 12 тогда понятно. Есть ещё свойство length которое показывает количество символов в строке
Последний раз редактировалось willis83; 04.04.2009 в 19:53. |
|
|||||
|
Dimonte, но в то же время 1 Sprite ест больше памяти, чем 1 объект класса с 5-6 свойствами...
__________________
Стой! Опасная зона! Работа мозга! |
|
|||||
|
Регистрация: Jun 2008
Сообщений: 51
|
marat_sa, тут уж все зависит от конкретного проекта. Если в вашем случае Sprite-объекты будут занимать слишком много памяти, то, конечно, надо по-другому делать. Если графика во многих спрайтах одинаковая, можно очень серьезно урезать использование памяти кэшированием. Если у вас появляются и исчезают с активного вида объекты редко, выигрыш в скорости от хранения объектов спрайтами будет ничтожен. Лучше всего, сделайте тесты с обоими вариантами и там уже смотрите, что лучше работает в вашем случае.
UPD: Совсем забыл, если ваши объекты не должны содержать другие объекты и реагировать на мышь, то можете вместо спрайтов расширять класс Shape, он заметно меньше памяти кушает. Последний раз редактировалось Dimonte; 05.04.2009 в 01:36. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:52. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|