Eu tenho lido sobre Entity System Frameworks especificamente Artemis. Estou tentando decidir se é certo para mim. Eu trabalho estritamente em jogos de arte em pixel 2D baseados em blocos e acho que eles nunca serão tão intensivos em recursos. Eu sempre usei OOP padrão com muita herança no passado.
Meu entendimento do Entity System Framework agora (não tenho certeza se o compreendo completamente ainda) é:
- Entidades não passam de IDs
- Componentes nada mais são que dados estúpidos adicionados a um pool de componentes de entidades
- Sistemas são funções de atualização anexadas ao mundo para manipular todas as entidades que correspondem à assinatura do componente Sistemas
Se meu entendimento estiver correto, estou tendo um pouco de dificuldade em conceituar a adição de mapas de mosaico e árvores comportamentais da IA a essa estrutura. Vou perguntar sobre IA no futuro.
Um mapa de mosaico deve ser incorporado a essa estrutura? Ou deve ser mantido separado para facilitar a geração com um editor de mapa de peças?
Se o tilemap deve ser incorporado nessa estrutura, cada tile é uma entidade diferente? E o tilemap de um sistema? Ou o próprio mapa da telha é uma entidade única com herança criada a partir dele?
Se o mapa de mosaico estiver separado, qual seria a melhor maneira de detectar colisões de entidades no mapa de mosaico externo?
Entendo que várias opções que listei podem estar corretas, mas se alguém já fez isso no passado, poderá esclarecer minha confusão. Talvez haja outra alternativa em que eu não tenha pensado?
Obrigado.
fonte
Respostas:
Implementei uma estrutura de componente de entidade (semelhante à Artemis) depois de já estar em desenvolvimento há algum tempo, mas acho que não teria feito as coisas de maneira diferente se partisse de uma folha em branco.
Eu tenho meu mundo totalmente separado da estrutura da entidade. Para mim, não fazia sentido converter o mundo em algum tipo de entidade ou coleção de entidades. Meu mundo é 3D com cubos, mas acredito que o mesmo se aplica aos ladrilhos. As entidades compõem todo o resto do mundo, mas o terreno é separado. No entanto, quando os cubos são removidos, eles geram entidades "materiais".
A detecção de colisão não é muito difícil de se conectar. Seu mundo provavelmente teria
isSolidAt(x,y)
métodos de tipo que seu sistema de colisão utilizará. Honestidade, eu já disse isso uma vez hoje em uma resposta diferente , faça o que fizer mais sentido para você. Você não está violando nenhuma regra, separando o mapa de blocos ou tornando-o uma entidade. Tudo o que você pode entender é o melhor. Para mim, isso era manter o mundo separado e transformar todo o resto em entidades.fonte
isSolidAt
método do mapa ?Adicionei tilemap como um componente separado para a entidade (com todos os tiles dentro) e também há renderizador separado para o mapa de tile, para que eu possa renderizá-lo em 3d ou em 2D. Criar todos os blocos como entidades é possível, mas caro.
algo parecido:
O benefício em separar o desenho da lógica é a ideia base do padrão MVC
fonte