![]() |
Рисование большого количества линий
Руководство поставила в принципе тривиальную задачу, необходимо рисовать простой линейный график. Но есть одно "но", об которое я споткнулся. Необходимо рисовать огромное количество линий (100к и более), плюс при определенных событиях нужно перерисовывать все нарисованные линии (если изменилась ценовая шкала например).
Обычный метод lineTo, без всяких перерисовак, почему-то начинает через время все медленнее работать, загружает процессор сильнее с каждай новой линией, хотя выполняется команда lineTo с таким же интервалом как и ранее. Делать bitmap тоже не подходит т.к. это не решает проблемы перерисовки, при изменении шкалы. Вообщем я пришел к выводу что нужна какая-то хитрость, чтобы не рисовать огромное количество линий, но визуально картинка бы не менялась. Рисовать каждую 10 или 20 точку не подходит, т.к. можно пропустить скачек на графике и просто не отобразить его. Может у кого есть соображения по данной проблеме? (Перепробовал уже множество методов) |
Цитата:
|
Проблему с рисованием решит, но не решит, когда потребуется перерисовать под новую Y шкалу. Дабы внести ясность: идут данные (цена Y, время X), когда цена достигает потолка, то шкала расширяется до нового лимита, и сталобыть предыдущие данные нужно отображать уже исходя что шкала Y уже не от 0 до 100$, а от 0 до 500$. Раздвигаться шкала Y может в зависимости от поступаемых данных. Да и при сильном resize, bitmap линии делает чуть ли не прозрачными
|
Цитата:
|
Тоесть Вы предлагаете, при resize прорисовать 100к линий в Sprite из которого потом сделать bitmap и только bitmap отобразить? (если не делать ресайз bitmapa)
|
Да именно так. потому что не добавляя на сцену рантаймом - память так не жрется, тем более на сцене нет векторной перерисовки
|
рисуйте линии себе спокойно порционно. нарисовали , допустим 100 линий, загнали в битмапу, стерли и т.д.
|
Написал на быструю руку класс, исходя из ваших слов. Либо, я что-то не так делаю, либо это не подходит, ибо с каждой новой линией скорость падает.
Устанавливаем fps 100 и смотрим Код AS3:
Кажется понял в чем проблема. Надо изменить функцию createPoint на Код AS3:
|
Возможно, что, рисуя линию напрямую в bitmap, вы получите больший выигрыш в производительности. Тут рассказано о библиотеке, которая умеет такое делать.
|
100К линий в графике, для просмотра человеком? Можно посмотреть, что за график в результате получается?
Добавлено через 13 минут Не знаю, у меня моментом, правда я малек переписал. Код AS3:
|
| Часовой пояс GMT +4, время: 08:54. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.