Depois de fazer duas perguntas sobre os sistemas de entidades ( 1 , 2 ) e ler alguns artigos sobre eles, acho que os entendo muito melhor do que antes. Ainda tenho algumas incertezas, principalmente sobre a construção de um emissor de partículas, um sistema de entrada e uma câmera. Obviamente, ainda tenho alguns problemas para entender os sistemas de entidades, e eles podem se aplicar a toda uma gama de objetos, mas escolhi esses três porque são conceitos muito diferentes, devem cobrir uma base bastante ampla e me ajudar a entender os sistemas de entidades e como lidar com problemas como esses, eu mesmo, à medida que eles aparecem.
Estou construindo um mecanismo em JavaScript e implementei a maioria dos recursos principais, que incluem: manipulação de entradas, sistema de animação flexível, emissor de partículas, aulas e funções de matemática, manipulação de cenas, câmera e renderização e um monte de coisas de outras coisas que os motores geralmente suportam. Eu li a resposta do Byte56, que me interessou em transformar o mecanismo em um sistema de entidades. Continuaria sendo um mecanismo de jogo HTML5, com a filosofia básica da cena, mas deve oferecer suporte à criação dinâmica de entidades a partir de componentes.
O problema que tenho agora é ajustar meu antigo conceito de mecanismo neste novo paradigma de programação. Estas são algumas das definições das perguntas anteriores, atualizadas:
Uma entidade é um identificador. Ele não possui dados, não é um objeto, é um ID simples que representa um índice na lista de cenas de todas as entidades (que eu realmente planejo implementar como uma matriz de componentes).
Um componente é um detentor de dados, mas com métodos que podem operar com esses dados. O melhor exemplo é um
Vector2D
, ou um componente "Posição". Tem de dados:x
ey
, mas também alguns métodos que tornam operacionais nos dados um pouco mais fácil:add()
,normalize()
e assim por diante.Um sistema é algo que pode operar em um conjunto de entidades que atendem a determinados requisitos; geralmente as entidades precisam ter um conjunto especificado de componentes para serem operadas. O sistema é a parte "lógica", a parte "algoritmo", toda a funcionalidade fornecida pelos componentes é puramente para facilitar o gerenciamento de dados.
Câmera
A câmera possui uma Vector2D
propriedade de posição, uma propriedade de rotação e alguns métodos para centralizá-la em torno de um ponto. Cada quadro é alimentado para um renderizador, juntamente com uma cena, e todos os objetos são traduzidos de acordo com sua posição. A cena é então renderizada.
Como eu poderia representar esse tipo de objeto em um sistema de entidades? A câmera seria uma entidade, um componente ou combinação (conforme minha resposta )?
Emissor de partículas
O problema que tenho com o meu emissor de partículas é, novamente, o que deveria ser o quê. Tenho certeza de que as próprias partículas não devem ser entidades, pois quero apoiar mais de 10.000 delas e acredito que criar tantas entidades seria um duro golpe no meu desempenho.
Como eu poderia representar esse tipo de objeto em um sistema de entidades?
Gerenciador de Entrada
O último sobre o qual quero falar é como a entrada deve ser tratada. Na minha versão atual do mecanismo, há uma classe chamada Input
. É um manipulador que assina os eventos do navegador, como pressionamentos de tecla e alterações na posição do mouse, além de manter um estado interno. Em seguida, a classe player possui um react()
método que aceita um objeto de entrada como argumento. A vantagem disso é que o objeto de entrada pode ser serializado em .JSON e depois compartilhado na rede, permitindo simulações suaves para vários jogadores.
Como isso se traduz em um sistema de entidades?