Alguém pode me explicar esse sistema de câmera em java?

Olá, gostaria que alguém me ajudasse nesse sistema de camera de um tutorial que eu vi, que é o seguinte, ele centraliza o personagem no meio da tela com uma variável x e uma y que tem valores fixos (sempre a metade do tamanho da tela).
image


Como podem ver na imagem acima, o personagem sempre fica no meio da tela.

Agora o passo seguinte é fazer o mapa se mexer de acordo com a direção que o player anda, porque apesar de ele estar em um ponto fixo na tela, que seria screenX e screenY, no mapa ele está em uma posição qualquer, worldX e worldY, as vezes até fora da tela, então o que tem que ser feito é isso, fazer o mapa se mexer, mas antes disso vem alguns outro passos como desenhar o mapa na tela.
Primeiro eu criei um array para armazenar as imagens que eu vou usar no mapa:


depois criei um método que ler um arquivo txt e converte ele para o mapa que eu desejo:

Essas variávels maxWorldCol e maxWorldRow são iguais a 50 que é o tamanho quanto horizontal tanto vertical de blocos no mapa.

Esse arquivo txt não seria na mais nada menos que os índices do array da primeira imagem:


Esse método que ler os arquivos txt, ler a primeira linha, transforma ela em um array de String, sendo cada caractere da linha um elemento do array e logo após, converte esses elementos em um int que são armazenados em uma variável int e em seguida armazenados em uma matriz (numTile):
image
Já com os dados do mapa, eu preciso desenhá-lo na tela, e para fazer isso vou usar um método chamado draw que está na classe do Mapa

e dentro de um while, eu consigo usar os dados do meu mapa para desenha-lo na tela, através da matriz numTile que é armazenada em uma variável int que é usada com índice do meu array de imagem, sabendo que essa variável tem valores de 0 a 5 e se for 0, desenharia grama, 1 desenharia parede, 2 água e assim por diante…
Outro coisa que acho importante mostrar é que quando eu aperto as teclas de movimento, meu personagem não se move pelas coordenadas da tela e sim com as do mapa:

E é aqui que começa a minha dúvida, como no eixo X e Y da tela o personagem vai ficar sempre centralizado, eu qria entender como ele consegue se mover no mapa com esses códigos

Eu já gravei esses códigos, mas não gosto só de gravar, gosto de entender também.

O nome disso é transformar coordenadas de mundo em coordenadas de tela.
É a “mágica” que acontece ao desenvolver games com rolagem horizontal e/ou vertical.
Como você sempre desenha o personagem no centro da tela, tem que ajustar a posição de desenho dos outros elementos da tela a medida que vai se deslocando.
Se você tivesse um cenário que ocupa somente uma tela, poderia ir desenhando o personagem em qualquer posição da tela, mas como você tem um cenário muito maior do que é visível na tela, você tem que implementar o efeito de uma janela de visualização e para isso você desenha o personagem sempre no centro e vai ajustando a posição do cenário.

1 curtida

Sim, mas uma coisa que eu não entendi mt bem foi a fórmula usada para fazer isso acontecer, que no caso seria essa última imagem