Gerenciando mapas de texto em uma matriz 2D para serem pintados na tela HTML5

Então, estou fazendo um RPG em HTML5 apenas por diversão. O mapa é um<canvas>&nbsp;(512px de largura, 352px de altura | 16 telhas, 11 telhas de cima para baixo). Eu quero saber se há uma maneira mais eficiente de pintar<canvas>.

Aqui está como eu tenho agora:

Como os blocos são carregados e pintados no mapa

O mapa está sendo pintado por telhas (32x32) usando oImage()&nbsp;peça. Os arquivos de imagem são carregados através de um simplesfor&nbsp;loop e colocar em uma matriz chamadatiles[]&nbsp;ser PINTADO ao usardrawImage().

Primeiro, nós carregamos as telhas ...

e aqui está como está sendo feito:

// SET UP THE & DRAW THE MAP TILES
tiles = [];
var loadedImagesCount = 0;
for (x = 0; x <= NUM_OF_TILES; x++) {
  var imageObj = new Image(); // new instance for each image
  imageObj.src = "js/tiles/t" + x + ".png";
  imageObj.onload = function () {
    console.log("Added tile ... " + loadedImagesCount);
    loadedImagesCount++;
    if (loadedImagesCount == NUM_OF_TILES) {
      // Onces all tiles are loaded ...
      // We paint the map
      for (y = 0; y <= 15; y++) {
        for (x = 0; x <= 10; x++) {
          theX = x * 32;
          theY = y * 32;
          context.drawImage(tiles[5], theY, theX, 32, 32);
        }
      }
    }
  };
  tiles.push(imageObj);
}

Naturalmente, quando um jogador inicia um jogo, ele carrega o mapa do qual ele parou por último. Mas por aqui, é um mapa de grama.

Neste momento, os mapas usam arrays 2D. Aqui está um mapa de exemplo.

[[4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 1, 1, 1, 1], 
[1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1], 
[13, 13, 13, 13, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 1], 
[13, 13, 13, 13, 1, 13, 13, 1, 13, 13, 13, 13, 13, 13, 13, 1], 
[13, 13, 13, 13, 1, 13, 13, 1, 13, 13, 13, 13, 13, 13, 13, 1], 
[13, 13, 13, 13, 1, 13, 13, 1, 13, 13, 13, 13, 13, 13, 13, 1], 
[13, 13, 13, 13, 1, 1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 1], 
[13, 13, 13, 13, 13, 13, 13, 1, 13, 13, 13, 13, 13, 13, 13, 1], 
[13, 13, 13, 13, 13, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 1], 
[13, 13, 13, 1, 1, 1, 1, 1, 1, 1, 13, 13, 13, 13, 13, 1], 
[1, 1, 1, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 1, 1, 1]];

Eu recebo mapas diferentes usando um simplesif&nbsp;estrutura. Uma vez que a matriz 2d acima éreturn, o número correspondente em cada array será pintado de acordo comImage()&nbsp;armazenado dentrotile[]. EntãodrawImage()&nbsp;irá ocorrer e pintar de acordo com ox&nbsp;ey&nbsp;e vezes por32&nbsp;pintar na corretax-y&nbsp;coordenada.

Como ocorre a comutação múltipla de mapas

Com o meu jogo, os mapas têm cinco coisas para acompanhar:currentID, leftID, rightID, upIDebottomID.

currentID:&nbsp;O ID atual do mapa em que você está.leftID:&nbsp;Qual ID decurrentID&nbsp;para carregar quando você sair à esquerda do mapa atual.rightID:&nbsp;Qual ID decurrentID&nbsp;para carregar quando você sair à direita do mapa atual.downID:&nbsp;Qual ID decurrentID&nbsp;para carregar quando você sair na parte inferior do mapa atual.upID:&nbsp;Qual ID decurrentID&nbsp;para carregar quando você sair no topo do mapa atual.

Algo para observar:leftID, rightID, upIDoubottomID&nbsp;NÃO são específicos, isso significa que eles são0. Isso significa que eles não podem sair desse lado do mapa. É meramente um bloqueio invisível.

Então, uma vez que uma pessoa sai de um lado do mapa, dependendo de onde ela saiu ... por exemplo, se eles saíram na parte inferior,bottomID&nbsp;será o número domap&nbsp;para carregar e, assim, ser pintado no mapa.

Aqui está um .GIF representacional para ajudá-lo a visualizar melhor:

Como você pode ver, mais cedo ou mais tarde, com muitos mapas, eu vou lidar commuitos&nbsp;IDs. E isso pode ficar um pouco confuso e agitado.

O mais óbvio é que ele carrega 176 blocos de uma vez, atualiza uma pequena tela de 512x352 e manipula um mapa no tempo. O con é que os identificadores MAP, ao lidar com muitos mapas, podem ficar confusos às vezes.

Minha perguntaEssa é uma maneira eficiente de armazenar mapas (devido ao uso de blocos) ou há uma maneira melhor de lidar com mapas?

Eu estava pensando nas linhas de um mapa gigante. O tamanho do mapa é grande e é todo um array 2D. A janela de visualização, no entanto, ainda é 512x352 pixels.

Aqui está outro .gif que fiz (para essa pergunta) para ajudar a visualizar:

Desculpe se você não consegue entender meu inglês. Por favor, pergunte a qualquer coisa que você tenha dificuldade em entender. Espero ter deixado claro. Obrigado.