Para descobrir o número de linhas e colunas que você precisa produzir, verifique a largura e a altura da janela e altere-a de acordo. Lembre-se de ouvir os eventos onResize e modifique a largura e a altura de acordo.
Quando você quiser fazer isso da maneira textual , poderá fazer isso usando texto com uma fonte monoespaçada e uma tabela em que cada célula contenha um caractere.
Para endereçar caracteres individuais, você pode criar um <table>
com o número correto de linhas e colunas, onde cada <td>
um possui um ID que consiste em suas coordenadas x e y. Dessa forma, você pode endereçar células individuais por ID e alterar seu innerHTML para alterar a letra e alterar sua classe css para alterar sua cor.
O uso de uma tela , no entanto, pode ser mais rápido, porque você não precisa manipular uma grande árvore DOM para cada caractere que precisa substituir. A Fortaleza dos Anões está fazendo uma coisa semelhante, a propósito. Os caracteres usados para representar objetos são, na verdade, bitmaps, não saída de texto verdadeiro, e são desenhados usando APIs gráficas 2D. A tela HTML5 está bem equipada para isso. Possui o método context.fillText que permite desenhar texto na tela. Isso pode ser usado para desenhar caracteres individuais. Você pode alterar o tamanho e a fonte da fonte manipulando as variáveis context.font e a cor de cada letra chamando context.fillStyle .
Observe que a chamada fillText centenas de vezes por quadro pode ser lenta, porque a rasterização das fontes é cara e nenhum navegador que conheço usa cache. Isso significa que, quando você renderizar a mesma letra com as mesmas configurações cem vezes, ela será rasterizada novamente cem vezes. Para aumentar o desempenho, você pode armazenar em cache a aparência rasterizada de cada letra com cada cor em uma tela oculta e desenhá-las usando context.drawImage . Copiar de uma tela para outra geralmente é muito mais rápido que a rasterização de fontes.
Atualmente, estou desenvolvendo um jogo 2D usando canvas e percebi que o maior consumidor de FPS era o desenho da fonte. Quando adicionei um cache para texto rasterizado, ele melhorou muito o desempenho.