Provavelmente em todos os jogos que um desenvolvedor precisa, de alguma forma, lidar com a entrada, sejam simples eventos de teclado e mouse, eventos de toque ou algo como entrada do acelerômetro. Essa entrada afeta diretamente objetos no jogo. Às vezes, a mesma entrada pode afetar objetos diferentes. Agora eu tenho pensado em como modelar isso. Na minha opinião, existem duas abordagens diferentes.
Deixe o próprio objeto do jogo lidar com isso, assine os eventos e chame seus próprios métodos. Isso tem a vantagem de deixar os próprios objetos do jogo decidirem quais entradas causam qual ação. Uma desvantagem parece ser que o código de entrada é mutilado com o código de objeto do jogo "principal". Além disso, os objetos do jogo desconhecem o estado do restante do jogo e, às vezes, talvez não atuem sobre os eventos de entrada. Isso não parece certo.
Peça a um controlador de entrada geral que cuide de toda a entrada e tome decisões sobre quem deve lidar com qual evento. Isso parece separar as preocupações melhor, mas acopla firmemente a classe do controlador de entrada aos objetos do jogo. De alguma forma, é necessário saber quem deseja receber qual evento e em qual estado. Isso também não parece certo.
Quais estratégias você está usando para lidar com isso?
fonte
Sugiro que o seu jogo (o Modelo ) defina uma lista de possíveis eventos de entrada (implementados como enumerações ou objetos com uma interface básica em comum). Coisas como
MovingRightStarted
,MovingRightStopped
,FiredWeapon1
,Escape
, etc ...O jogo define uma estrutura de dados (por exemplo, a
queue
) que seu código de entrada (o Controlador ) pode preencher com eventos de entrada.Então seu jogo pode pesquisar a estrutura de dados para obter os eventos de entrada.
Dessa forma, você pode conectar diferentes tipos de controladores para alimentar o modelo:
Você apenas os tem para enviar eventos de entrada para o modelo.
fonte
queue
tipo de dados como para armazenar isso. Você poderia explicar o porquê?