Рисование абзаца в Dart

Я использую GameLoop, который зависит от Canvas, но работает и без него. У меня есть массив символов, которые я рисую в абзаце почти каждый кадр рендеринга. Строки разделяются с помощью </br>. Каждый раз я проверяю, были ли какие-либо изменения в массиве и нужно ли его перерисовывать.

Почти каждый символ имеет свой класс, поэтому он выглядит так: < span class="my_css_class">CHAR< /span> (без пробелов). Таким образом, каждый символ имеет свой стиль css.

Производительность велика с точки зрения вычислений, но рендеринг в абзац требует большой загрузки ЦП. Есть ли лучший способ более эффективно отображать абзац?

Массив составляет около 40x80 символов.

Код, который отображает символы:

if(!Utility.isDuplicate()) {
    StringBuffer sb = new StringBuffer();
    for(int i = 0; i < HEIGHT; i++) {
      for(int j = 0; j < WIDTH; j++) {
        sb.write(array[i][j]);
      }
      sb.write("<br />");
    }
    querySelector("#main_paragraph").innerHtml = sb.toString();
    }
 }

person Vilda    schedule 05.09.2014    source источник
comment
Изменяется ли большинство персонажей или только некоторые?   -  person Günter Zöchbauer    schedule 05.09.2014
comment
Немного. Около 20, я думаю.   -  person Vilda    schedule 05.09.2014
comment
Это работало отлично, пока я не добавил эти теги span, но они необходимы.   -  person Vilda    schedule 05.09.2014
comment
Не могли бы вы добавить код, показывающий, как вы выполняете манипуляции с DOM?   -  person Günter Zöchbauer    schedule 05.09.2014
comment
Я добавил его в пост.   -  person Vilda    schedule 05.09.2014
comment
Мне лично не нравится термин «рисование абзаца» здесь. Вы просто устанавливаете HTML-код внутри контейнера или чего-то еще #main_game. Возможно, вы хотите создать предопределенную матрицу с диапазонами и присвоить ей идентификаторы и изменить только содержимое диапазонов, а не записывать их полностью.   -  person Robert    schedule 05.09.2014
comment
Я пытался сделать это, и это привело к еще худшей производительности. Это было неиграбельно.   -  person Vilda    schedule 05.09.2014
comment
Я думаю, использование холста здесь может решить вашу проблему. Как выглядит ваша финальная игра (графически)?   -  person Robert    schedule 05.09.2014
comment
Ну, как вы, наверное, догадались, он основан на ASCII. Требуется CSS, поэтому холст, вероятно, не вариант.   -  person Vilda    schedule 05.09.2014
comment
Может быть, вы можете добавить несколько элементов в DOM, а затем показать () скрыть () в зависимости от ваших потребностей? Это должно быть намного быстрее, чем удаление/анализ из/в DOM.   -  person Robert    schedule 05.09.2014
comment
Это сработало бы только в том случае, если бы количество элементов было не таким большим. Массив/разрешение игры, которое у меня есть, составляет около 40x80 символов.   -  person Vilda    schedule 05.09.2014
comment
Как отображаются персонажи? Просто персонаж, а класс определяет цвет?   -  person Robert    schedule 05.09.2014
comment
Класс определяет тень + цвет. Последний абзац представляет собой композицию всех этих символов и интервалов.   -  person Vilda    schedule 05.09.2014
comment
Так сколько у тебя FPS? Вы используете рабочих?   -  person Robert    schedule 05.09.2014
comment
Теперь проблема устранена. По-видимому, у меня был один незакрытый тег, который вызвал так много проблем с производительностью. Странный.   -  person Vilda    schedule 05.09.2014
comment
В порядке. Для полноты картины: animatr.rhscripts.de/asciigame/asciigame.html   -  person Robert    schedule 05.09.2014


Ответы (1)


Как правило, это невозможно сделать с помощью абзацев, поскольку вся обработка HTML слишком громоздка и отличается от браузера к браузеру. Подумайте о переходе на холст или какой-либо WebGL, который должен обеспечить гораздо лучшую производительность.

person FigsHigs    schedule 10.10.2016