Eu ganho meu dinheiro em C # Geralmente, nesse idioma, eu gosto de desacoplar tudo aos céus usando interfaces. Isso me serviu bem no código corporativo, mas, ao escrever jogos em C #, me vejo tendendo à herança devido à capacidade de definir alguns comportamentos padrão para as classes base. Eu me sinto sujo fazendo isso, como se estivesse desobedecendo a algum deus da arquitetura que disse uma vez "favorecer a composição sobre a herança". Sei que não é preto e branco, mas também sinto que poderia usar interfaces com um pouco mais de trabalho e conseguir praticamente a mesma coisa.
O que outras pessoas fazem? A herança é a abordagem correta para jogos ou devo refatorar em algumas interfaces?
c#
architecture
Peter Short
fonte
fonte
Respostas:
A herança em jogos é, na verdade, uma das piores coisas que você pode fazer - em particular no que diz respeito às entidades. Leia isso por que. Composição sobre herança leva um longo caminho com os jogos. Quanto a outras áreas do seu motor, isso realmente não importa. Digamos, por exemplo, que você esteja fazendo uma chamada para algum tipo de serviço de rede externo, e você poderá herdar um tipo de serviço genérico para, por exemplo. HTTPService e SocketService - da mesma forma que nos aplicativos corporativos aos quais você está acostumado.
A menos que seu jogo é muito simples, você vai querer usar uma entidade arquitetura baseada em componentes (CBE). A idéia geral é que, com as entidades, a razão pela qual elas são tão comumente compostas e não herdadas é porque você não pode saber até o tempo de execução quais recursos uma determinada entidade terá. Por exemplo, pegue a nave do jogador em um atirador espacial. Você não sabe até certo ponto durante o jogo, quais armas, armaduras, sistemas (ou seja, componentes) que o jogador vai pegar, comprar, vender, perder, destruiu, etc. Portanto, a única maneira realista de modelar isso é através da composição de objetos. O lado positivo desse cenário é que você também pode ter inimigos totalmente personalizáveis, criados da mesma maneira, em vez de inimigos que são sempre exatamente iguais sempre que você vê esse tipo de inimigo. Assim, com os CBEs, você pode ver um cargueiro marciano e pensar: "Ah, ele só tem pequenos lasers, eu vou derrubá-lo", e geralmente isso seria verdade, mas quando você entra no alcance de repente, percebe que ele tem uma bunda grande. arma de buraco de minhoca. Surpresa surpresa!
A componente está removendo o acoplamento implícito da lógica, e isso é BOM.
fonte
Para quem fala alemão um livro interessante: http://www.amazon.com/Architektur-Kerns-einer-Game-Engine-Implementierung/dp/3639324471/ref=sr_1_1?ie=UTF8&qid=1314875533&sr=8-1
Um olhar mais atento sobre quando e por que usar qual arquitetura pode ser encontrada aqui: /programming/1901251/component-based-game-engine-design
Para mim, eu decido minha arquitetura, dependendo do tamanho do projeto e da possibilidade de estender ou reutilizar o código. Por que investir horas e horas na arquitetura de um micro projeto onde não há chance de você usar o código novamente? Ao mesmo tempo, você pode finalizar o projeto.
Composição versus componentes Os componentes são interessantes, mas na maioria dos projetos / arquiteturas, a composição também funciona (sem sobrecarga baseada em componentes). Depende do que seu sistema de componentes pode fornecer que a composição não pode.
tudo o que era possível sem componentes há muito tempo também
fonte