SamL
(usa XUbuntu)
Enviado em 24/12/2021 - 11:46h
@rafael_grether
rsrsrs O goomba é um inimigo dentro do super mario bros, com orientação a dados, torna-se possível controlar qualquer elemento, da gui inclusive, com os mesmos controles que o player usa para controlar o mário.
É difícil entender sem mostrar código, por isso, deixo aqui uma sugestão pra tu ler esse link:
https://austinmorlan.com/posts/entity_component_system/
Ali fala sobre o pattern ECS, só que sem usar jogos, é pra jogos mas não usa um jogo como exemplo, é puro C++.
rafael_grether escreveu:
Sinceramente eu não conheço a engine de um jogo, como isso tudo funciona. A primeira vista (sem conhecer os detalhes e particularidades) eu poderia herdar um objeto de uma classe e utilizar tanto para personagem A como personagem B, sobrescrevendo apenas o que necessita de mudanças, como velocidade do personagem por exemplo. Assim mantenho os mesmos comandos para mover o Mario e aquele amigo verde dele, herdando o mesmo objeto; e só defino a velocidade do cara verde como algo diferente.
Isso é exatamente o que eu faria normalmente, acontece que ele gera problemas no longo prazo, como métodos complexos e gigantes.
Com orientação a dados, tu só precisa programar os métodos uma única vez e então, acomplar um dado para aquele método;função e está feito.
O ruim de pensar com objetos em jogos é que a classe torna-se altamente especializada somente naquilo que ela foi programada pra fazer.
Então, se tu tem o mario e o luigi (o amigo verde) tu teria uma única classe com propriedades para ser controladas por cada jogador, porém, se tu quiser fazer o goomba (inimigo) ser controlado pelos players, ai o bicho peg feio porque terá de reimplementar os controles na classe base dos players para ser possível o goomba também ser controlável.
Já usando orientação a dados, tu faz somente uma classe Controles com os dados necessários, mas sem nennhum método/função, e em separado tu cria o sistema, que é uma função que apenas recebe o Conrtoles e faz mover qualquer objeto que tenha esse componente.
No caso, nem é preciso adicionar o Controles dentro de nenhuma classe, já que é possível apenas "adicionar" num array do ECS e então executar de acordo com a necessidade programadas. Fica melhor de entender o que eu disse se tu olhar ali no link do ECS.
É muito interessante orientação a dados, não sei nem como fiquei tanto tempo sem descobrir algo assim. Encontrei até um framework com ECS para jogos.
Dá uma olhada nesse exemplo de uso da EnTT:
https://github.com/Kerndog73/EnTT-Pacman/blob/master/src/core/factories.cpp
Ali mostra como é construido cada personagem do jogo, sendo possível adicionar qualquer compoente em runtime.