Eu tenho um jogo simples de Tower Defense usando um mundo lado a lado. Creep e torres estão em um azulejo o tempo todo.
Como devo representar a posição de fluência no código? (Os rastejantes conhecem seu ladrilho atual e sua posição no referido ladrilho ou estão cientes de sua posição absoluta no mundo?)
Basicamente, estou procurando melhores práticas, dicas de tipo de padrão de design ou informações gerais sobre como gerenciar o posicionamento em um mundo baseado em blocos.
Obrigado.
tiles
tower-defense
pwny
fonte
fonte
Respostas:
Na minha experiência, a melhor maneira de lidar com posições em um mundo baseado em blocos é ignorar que você está em um mundo baseado em blocos. Ou seja, mantenha suas entidades armazenadas em posições mundiais, mantenha o (s) caminho (s) em que suas entidades estarão viajando armazenadas no espaço do mundo e, se possível, não permita que suas entidades ou outra lógica do jogo saibam sobre blocos em absoluto.
O problema de considerar blocos é que eles introduzem casos de canto no código do jogo; muitos lugares novos onde seu código pode se comportar de maneira sutil. Não apenas as torres (por exemplo) precisam ser capazes de dizer quão próximas elas estão das entidades em seu próprio bloco, mas também das entidades em outros blocos. E assim que você pensa em ladrilhos, começa a pensar em encontrar os vizinhos dos ladrilhos, o que também é fácil de introduzir bugs (principalmente nas bordas e cantos do campo de jogo).
Os mundos baseados em blocos são realmente convenientes para edição de nível. Mas meu conselho é usar apenas a estrutura de blocos para edição; não deixe que a maneira como o nível seja construído se espalhe na própria lógica do jogo.
fonte
Eu usaria posições mundiais para suas entidades. Isso funcionará bem, desde que o mundo não se torne realmente grande (onde as posições mundiais se tornam impraticáveis devido à precisão, para que você tenha que dividir o mundo em partes).
Você pode facilmente calcular o ladrilho atual de seus x e y coordenadas. Também ter coordenadas mundiais facilita a comparação de entidades (por exemplo, a entidade X está no intervalo da torre Y? ).
O uso da outra abordagem também funciona, mas você terá que lidar com 2 conjuntos de coordenadas o tempo todo (índice (s) do bloco e posição no referido bloco).
Portanto, concluindo: ambas as abordagens funcionam, mas o uso de coordenadas mundiais parece muito mais prático (menos coordenadas para lidar, menos cálculos necessários). Para sua conveniência, suas entidades podem até ter um método getter para o índice de blocos x e y que calculará a posição atual do bloco rapidamente.
fonte