Es probable que estos pasos que mencione se realicen en motores separados. Es solo que los motores de juego simples generalmente los tienen en una sola pasada. Su secuencia
for each object
do physics
do game logic
draw
se convierte
call physics subsystem
call game logic subsystem
call drawing subsystem
Physics Engine se encarga de las posiciones y los tamaños.
Game Logic Engine se encarga de interpretar qué cambió Physics Engine (podría obstruir algunos puntos de referencia ...), qué objetivos tienen los personajes y qué comportamiento deberían estar haciendo , ejecuta scripts programados (esta función de pensar ).
Drawing Engine dibuja qué objetos son visibles, y él sabe qué objetos son visibles porque los motores Quake hacen trampa aquí (ver la sección Dibujar).
Mi consejo para ti es más bien estudiar cómo se hacen las simulaciones en lugar de los motores de juego. Hay una gran cultura pop que relaciona el desarrollo de juegos y los motores de juegos están hechos en lenguajes imperativos (debido a la tradición y la velocidad); así que fue más esclarecedor para mí obtener buenos libros de texto (en lugar de teoría) y LUEGO mirar motores (práctica) en lugar de mirar motores y descifrar durante horas cómo lo hicieron.
Física
La noción completa de iterar todas las entidades y hacer {think, draw} probablemente conducirá a problemas. Habrá conflictos, etc. Creo que Valve tiene a Havok y creo que Havok se encarga de la física lo suficientemente correcta.
Pensar
La función de pensar se ejecuta cuando un tiempo en un juego es igual al tiempo en el siguiente pensamiento . Funciona de esta manera en el motor Quake, y el motor Quake es la base para los motores Half Life. NO se ejecuta cada vez.
Internamente, debería ser una simple iteración a través de una lista de entidades y verificar si ha pasado el tiempo para llamar a la función think. La complejidad temporal será O (N), donde N es el número de entidades.
Si hay una gran cantidad de entidades, debe medir cuánto mejorará los fps. Tenga en cuenta que, debido a la ley de Amdahl, es una aceleración potencialmente invisible. Quiero decir, simplemente iteras a través de todos los elementos y disminuyes y verificas un número.
Lo aceleraría clasificando las entidades por el siguiente pensamiento (crear una lista de punteros a entidades y ordenarlo cada vez; no una matriz de entidades, porque las entidades pueden cambiar su próximo pensamiento en cualquier momento, por lo que reorganizarlas en la matriz toma O (N) en lugar de O ( 1) en la lista).
También debe mirar el planificador O (1) en Linux .
Dibujar
El motor dibuja lo que es aproximadamente visible desde el área en la que se encuentra la cámara. El nivel del juego es la partición en un árbol, y un área es la hoja de ese árbol. No te molestaré con detalles al respecto ... Entonces, si una entidad es visible, se coloca en un conjunto de entidades visibles y se dibujan.
Almacenan qué áreas son áreas potencialmente visibles. Se llama "conjunto potencialmente visible", PVS para abreviar. Hay visualización de PVS , la cápsula verde es el jugador y a su alrededor se muestra lo que contiene su PVS.
<some commercial engine>
hace?