Como representar um personagem do jogo no código?

7

Em um jogo anterior que escrevi, eu tinha uma classe de personagem do jogo. Essa classe rastreou a localização, a velocidade e um conjunto de estados. Exceto que os estados estavam vinculados muito perto da animação. Cada estado tem uma lista de botões que podem fazer a transição para outros estados e uma animação que acompanha esse estado (você também pode fazer alterações no estado da animação por quadro, se quiser fazer algo como um soco com tempo muito específico ou alguma coisa). Todos os dados de colisão para o personagem foram feitos por quadro de animação. Isso foi feito para um jogo de luta, então parecia necessário na época ter a animação e a colisão tão intimamente ligadas ao estado do personagem.

Mas o programador em mim sente que isso está misturando responsabilidades. E agora estou criando um mecanismo de jogo que quero ser um pouco mais genérico do que isso. Como você normalmente organiza as estruturas relacionadas aos personagens, como eles são desenhados, como eles interagem entre si e com o mundo, etc.?

Sei que essa é uma pergunta vaga que depende do tipo de jogo que eu quero fazer, mas acho que ver como outras pessoas lidam com isso seria útil.

(e se isso importa, tudo isso é para um jogo 2D.)

Alex Ames
fonte

Respostas:

8

Se o comportamento do jogo e a animação estão intimamente relacionados - como nos jogos de luta -, isso não é necessariamente uma mistura de responsabilidades.

Como foi dito em detalhes, por que o MVC e o TDD não são mais empregados na arquitetura de jogos? , Em um jogo, [modelo e visão] estão muito mais próximos um do outro. O mundo do jogo (modelo) é tipicamente um conjunto de entidades posicionadas em algum espaço virtual. A visualização do jogo também é um conjunto de entidades posicionadas em algum espaço virtual ... O resultado final é que a linha entre o modelo e a visualização em um jogo seria arbitrária e não ajudaria: você acabaria duplicando muito estado entre eles .

Em outras palavras, se uma abstração pretendida não está ajudando a parcelar a responsabilidade e melhorar a capacidade de manutenção, não é abstração, é apenas uma divisão.

Quanto a como eu criaria um mecanismo de jogo compatível com qualquer modelo de que eu precisava - seja uma animação intimamente ligada e bits de física, ou uma separação total da interação e do renderizador de objetos, ou ambos para coisas diferentes no mesmo jogo - eu vou dê a resposta padrão. Evolua sua hierarquia com entidades baseadas em componentes .

Comunidade
fonte