Probablemente en cada juego un desarrollador tiene que lidiar de alguna manera con la entrada, ya sean simples eventos de teclado y mouse, eventos táctiles o algo así como entrada de acelerómetro. Esta entrada directamente de efectos indirectos objetos en el juego. A veces, la misma entrada puede afectar diferentes objetos. Ahora he estado pensando en cómo modelar esto. A mi modo de ver, hay dos enfoques diferentes.
Deje que el objeto del juego lo maneje, suscríbase a los eventos y llame a sus propios métodos. Esto tiene la ventaja de dejar que los objetos del juego decidan qué entradas causan qué acción. Una desventaja parece ser que el código de entrada se destruye con el código objeto del juego "central". Además, los objetos del juego desconocen el estado del resto del juego y, a veces, tal vez no deberían actuar sobre los eventos de entrada. Esto no parece correcto.
Haga que un controlador de entrada general se encargue de todas las entradas y tome decisiones sobre quién puede manejar qué evento. Esto parece separar mejor las preocupaciones, pero combina estrechamente la clase de controlador de entrada con los objetos del juego. De alguna manera necesita saber quién quiere recibir qué evento y en qué estado. Esto tampoco parece correcto.
¿Qué estrategias estás usando para manejar esto?
fuente
Sugeriría hacer que su juego (el Modelo ) defina una lista de posibles eventos de entrada (implementados como enumeraciones u objetos con una interfaz base en común). Las cosas tales como
MovingRightStarted
,MovingRightStopped
,FiredWeapon1
,Escape
, etc ...El juego define una estructura de datos (por ejemplo a
queue
) que su código de entrada (el controlador ) puede llenar con eventos de entrada.Luego, su juego puede sondear la estructura de datos para obtener los eventos de entrada.
De esta manera, puede conectar diferentes tipos de controladores para alimentar el modelo:
Solo tiene que enviar eventos de entrada al modelo.
fuente
queue
tipo de datos para almacenar esto. ¿Podrías explicar por qué?