Programación de juegos: métodos comunes y patrones de diseño [cerrado]

9

Comencé a escribir un motor de juego muy simple para poder aprender OpenGL 3.x mejor, pero debido a mi inexperiencia y mi escaso conocimiento de cómo debería diseñarse un juego 3D, generalmente me meto en problemas cuando me doy cuenta de que debería haber diseñado mis clases. diferentemente. Otros problemas a los que me enfrento es cómo hacer un seguimiento del tiempo de manera concisa en el juego y actualizar el movimiento según sea necesario y cómo decirle al renderizador que necesita volver a dibujar. También sigo necesitando realizar funciones Get y Set para pasar varias banderas de un objeto a otro, ¿es una mala práctica?

Entonces, como dice el título, estoy interesado en cualquier libro o artículo / tutorial y fuente que pueda ayudarme y explique algunos patrones de diseño comunes en el diseño del juego (es decir, controladores de estado del juego, fuentes, etc.).

Por cierto, todavía estoy usando Freeglut, ¿recomendaría que me mude a un mejor sistema de ventanas antes de progresar o después de obtener una mejor comprensión de OpenGL?

Corazón triste
fuente
12
Respuesta estándar "Estoy escribiendo un motor" = Escribir juegos, no motores. Los motores son una profunda madriguera de conejo para caer. ¿Qué investigación has hecho hasta ahora? Aquí obtendrá los mejores resultados seleccionando un solo problema centrado y buscando preguntas pasadas. Sigue buscando nuevos problemas a medida que surjan mientras escribes tu juego, uno a la vez. Como nota al margen, darse cuenta de que las clases necesitan un nuevo diseño es común y el proceso de hacerlo se llama "refactorización", significa que está aprendiendo sobre la marcha y eso es algo bueno.
Patrick Hughes,
1
Gracias por su respuesta. Lo siento si no estaba claro, realmente no quiero construir un motor de juego completo, pero me gustaría aprender algunos patrones de diseño básicos utilizados en el diseño del juego para diseñar mejor mis clases. Supongo que debería haber algunas soluciones comunes a problemas comunes. Cuanto más profundizo en el diseño, más problemas surgen y más difícil es encontrar respuestas. Mi investigación hasta ahora no ha sido muy fructífera, un buen tutorial que encontré que profundiza en la creación de un juego es codeproject.com/Articles/27219/… .
Grieverheart
1
Ya veo, poner "métodos comunes de motor de juego" en el encabezado tiende a dirigir la discusión hacia ... motores =) En cualquier caso, la razón por la que te resulta difícil conseguir lo que estás buscando es que hay tantos diferentes tipos de juegos, ya que hay años en un calendario maya y cada tipo tiene sus propias necesidades. Es posible que obtenga mejores resultados si busca un tipo específico de juego, el shooter en primera persona es muy común, para que los motores de búsqueda tengan cierta tracción.
Patrick Hughes
Un estilo FPS o itinerancia libre sería lo que estoy buscando. En esencia, me gustaría crear un mundo donde pueda experimentar con varios gráficos y técnicas de animación. Ya tengo una cámara y un movimiento básicos, como saltar y hacer estragos y cargar el modelo, pero no me siento bien, por ejemplo, pongo la animación para caminar dentro de la clase de cámara y uso una variable interna para contar cuadros. Principalmente estoy reparando los agujeros y no produzco nada robusto. Supongo que es parte del proceso de aprendizaje y tal vez estoy tratando de avanzar demasiado rápido.
Grieverheart
3
codificación completa del juego, la arquitectura del motor del juego son dos libros sobre codificación de juegos, obtendrá una visión general del desarrollo y la tecnología subyacente, se refieren a un poco de todo
dreta

Respuestas:

11

Escribiré una respuesta adecuada ya que estuve en tu etapa hace aproximadamente 2 meses.

Comencé a escribir un motor de juego muy simple para poder aprender OpenGL 3.x mejor, pero debido a mi inexperiencia y mi escaso conocimiento de cómo debería diseñarse un juego 3D, generalmente me meto en problemas cuando me doy cuenta de que debería haber diseñado mis clases. diferentemente.

No te preocupes por eso. Con su falta de experiencia, nunca podrá pensar en todas las posibilidades y formas en que se utilizará una clase determinada en su motor. Es mejor si considera las características principales de la clase, la implementa y la reestructura más tarde. No intentes pensar demasiado, estarás perdiendo el tiempo en esta etapa. Mi primer juego fue un completo desastre, estoy seguro de que fue el caso para la mayoría de las personas.

Otros problemas a los que me enfrento es cómo hacer un seguimiento del tiempo de manera concisa en el juego y actualizar el movimiento según sea necesario y cómo decirle al renderizador que necesita volver a dibujar.

Lo que necesitas es saber qué es un bucle de juego. Este es un buen lugar para comenzar. Una vez que comience a escribir código más complejo, como el manejo de la física, es posible que desee considerar bucles con tiempos de fotogramas variables, pero comience con poco. Un bucle de juego de marco fijo simple debería ser suficiente por ahora.

También sigo necesitando realizar funciones Get y Set para pasar varias banderas de un objeto a otro, ¿es una mala práctica?

Esta es más una pregunta de ingeniería de software. Con el tiempo verá qué datos necesita proteger y cuáles son seguros. Probablemente sea mejor si solo implementa una función y luego ve lo que no está expuesto fuera de ella y puede tratarse como datos públicos.

Todo es cuestión de experiencia. Escribirás una clase de cámara, luego verás qué funcionalidad quieres de ella al lado de las matrices de transformación. Si desea algún consejo inmediato, debo decir, implemente huesos desnudos, extienda más tarde.

Artículos y libros:

  • Desarrollo de motor de juego

Estos libros hablan sobre la arquitectura de los motores y las tuberías de juegos modernos. Le darán una buena visión general de la tecnología subyacente. Recomiendo el primer libro si tiene que elegir, es menos "sesgado" hacia ciertas tecnologías, aunque al final es probable que desee obtener ambas, ya que son excelentes fuentes de conocimiento.

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • Detección de colisiones

http://www.peroxide.dk/papers/collision/collision.pdf

(Estoy vinculando esto porque me resultó difícil encontrar artículos sobre cómo se realiza la detección de colisión 3D adecuada).

Hay más libros, pero cuando hayas terminado con esto (especialmente la arquitectura de Game Engine), sabrás mejor lo que quieres.

Por cierto, todavía estoy usando Freeglut, ¿recomendaría que me mude a un mejor sistema de ventanas antes de progresar o después de obtener una mejor comprensión de OpenGL?

WinAPI, si siente que tiene tiempo y ganas de aprender programación de Windows (si está desarrollando para Windows). FreeGLUT está bien para aprender, pero eventualmente querrás más funcionalidad. Sin embargo, si desea tomar la ruta completamente diferente, puede iniciar OpenGL con bibliotecas como SFML o SDL. Quédate con FreeGLUT, a menos que seas terco como yo. Fui directo a WinAPI.

dreta
fuente
Hola Dreta, muchas gracias por tu muy buena respuesta. Lo estaba esperando: P! Afortunadamente, ya sé cómo hacer una detección de colisión, ya que he implementado algunos algoritmos para simulaciones físicas :).
Grieverheart
@ user1294203 increíble, me perdí al comenzar, así que lo publiqué por si acaso
dreta
Voto por SFML, si no quieres meterte demasiado con el código específico de la plataforma. Es pequeño, fácil, limpio y puede sumergirse fácilmente en el código para comprender cómo envuelve WINAPI, por ejemplo.
edin-m