![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2013
Сообщений: 12
|
Доброго времени суток.
Вопрос мой касается прокрутки контента на мобильных устройствах (в частности, планшетах). При формировании таблиц, состоящих только из текстовых полей (TextField), количеством столбцов около 10-12, содержимое более-менее нормально прокручивается при количестве строк около 200-300, а при 500 и выше тормозит. Глядя на то, как огромное количество контента в нормальных приложениях, разработанных нормальными программистами, прокручивается со скоростью ураганного ветра и не подвисает ни ни миллисекунду, делаю заключение о том, что косяк у меня. Но вот вопрос - в чем заключается этот косяк? Вкратце об особенностях кода. Таблица представляет из себя Sprite, каждая строка это так же Sprite, состоящий из TextField'ов. Прокрутка осуществляется событиями TouchEvent через изменение координат scrollRect. И эта конструкция тормозит. Сталкивался ли кто-нибудь с такими проблемами? Есть советы в этой области? |
|
|||||
|
Цитата:
А выход достаточно прост. Создать таблицу длиной всего раза в 2 больше высоты экрана. И менять текст в полях на тот, который должен быть при определенном проценте прокрутки. И использовать аппаратное ускорение графики |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 145
|
Можно поставить scrollRect на ширину-высоту стейджа, а контент cacheAsBitmap. На телефонах не проверял, но в браузере с овер9000 элементов проблему решило
|
|
|||||
|
Регистрация: May 2013
Сообщений: 12
|
cacheAsBitmap уже использован, тормозит даже с ним
|
|
|||||
|
Регистрация: Sep 2006
Сообщений: 145
|
Тогда да, пробуйте Starling и Feathers
|
|
|||||
|
Регистрация: May 2013
Сообщений: 12
|
Цитата:
Добавлено через 21 минуту Честно говоря, сейчас сравнил скорость прокрутки с cacheAsBitmap = true и = false. Разницы никакой. Может она не влияет? Или может я как-то неправильно объявляю значение этого свойства? Грубо говоря, у меня есть stage, есть переменная content типа Sprite. После формирования таблицы она лепится на content, а он свою очередь лепится на stage. Перед тем как content приклеить к stage, я объявляю у него cacheAsBitmap = true |
|
|||||
|
Цитата:
Цитата:
Цитата:
|
|
|||||
|
Banned
[+5 04.06.13]
[+1 08.06.13] Регистрация: May 2013
Сообщений: 52
|
Цитата:
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFormat; import flash.utils.getTimer; public class Main extends Sprite { private var _tableSprite:Sprite; private var _fpsTextField:TextField; private var _lastTime:Number; private var _currentTime:Number; public static const SECOND:Number = 1000; public function Main() { _lastTime = getTimer(); _currentTime = _lastTime; _tableSprite = new Sprite(); _tableSprite.mouseChildren = false; var tf:TextField; for (var i:int = 0; i < 15; i++) { for (var j:int = 0; j < 500; j++) { tf = new TextField(); tf.text = "text"; tf.x = i * tf.textWidth; tf.y = j * tf.textHeight; _tableSprite.addChild(tf); } } _tableSprite.cacheAsBitmap = true; this.addChild(_tableSprite); _fpsTextField = new TextField(); _fpsTextField.defaultTextFormat = new TextFormat( null, null, 0xff0000 ); _fpsTextField.background = true; _fpsTextField.backgroundColor = 0xffffff; _fpsTextField.width = 100; _fpsTextField.height = 30; this.addChild(_fpsTextField); stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler); stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler); stage.addEventListener(MouseEvent.CLICK, clickHandler); } //---------------------------------------------------------------------- // // Event handlers // //---------------------------------------------------------------------- private function enterFrameHandler(event:Event):void { _currentTime = getTimer(); var fpsCount:Number = SECOND / (_currentTime - _lastTime); var fpsString:String = fpsCount.toString(); _fpsTextField.text = _tableSprite.cacheAsBitmap.toString() + " | " + fpsString.substr(0, 5); _lastTime = _currentTime; } private function mouseWheelHandler(event:MouseEvent):void { _tableSprite.y += event.delta; } private function clickHandler(event:MouseEvent):void { _tableSprite.cacheAsBitmap = !_tableSprite.cacheAsBitmap; } } } Последний раз редактировалось Final Hope; 28.05.2013 в 19:25. Причина: Не то процитировал |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|