Форсирование меньших областей перерисовки в ActionScript - PullRequest
1 голос
/ 13 июля 2010

У меня есть небольшая таблица сценариев действий, которая предназначена для обновления в реальном времени, а также может поддерживать более 10000 точек данных.То, как он настроен в настоящий момент, не требует перерисовки всего графика, если новая строка, которую мы хотим добавить, не расширяет границы этого графика.

Тем не менее, области перерисовки показывают, что весь график перерисовывается, а не одна строка, которую мне нужно добавить.

Когда диаграмма получает новый фрагмент данных из javascript, она выполняет следующие действия (некоторые элементы были удалены для ясности.

private function registerJSCallbacks() : void
{
    ExternalInterface.addCallback( "addData", addData );
}

private function addData( val : * ) : void
{
    trace( "addData",val );
    var g: Graphics = this.graphics;    
    g.moveTo(x1,y1); 
    g.lineTo(x2,y2); 
}

Есть ли лучший способ сделать это,это не будет перерисовывать весь экран? Неправильно ли мой шаблон кодирования для этого типа обновлений?

Я новичок, поэтому даже весьма смутные советы приветствуются.

1 Ответ

2 голосов
/ 13 июля 2010

Вы редактируете базовый вектор, поэтому он должен перерисовать все это.У вас есть пара вариантов:

  1. (самый простой): порождает новый спрайт после каждой операции рисования X, так что каждый розыгрыш пересчитывает только несколько векторных линий

  2. (более сложный): используйте один Sprite для рисования, и каждые X операции рисования, записывайте графику в спрайте в резервный объект BitmapData (используя bitmapData.draw) и очищайте спрайт.

Вариант 2, вероятно, работает лучше, чем вариант 1, но я не тестировал этот конкретный сценарий.Вы можете получить сопоставимую производительность, если вы sprite.cacheAsBitmap = true на каждом Sprite в варианте 1 при переходе на новый «активный» спрайт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...