2009-12-29 16 views
14

He intentado desarrollar un juego 2D con C++ en el pasado utilizando meros objetos, sin embargo, en el proceso de diseño no sé cómo y qué partes del motor debo dividir en objetos más pequeños, qué deberían hacer exactamente y cómo hacer que interactúen entre sí de forma adecuada. Estoy buscando libros, tutoriales, documentos, cualquier cosa que explique el diseño del motor del juego en detalle. Gracias.OOP Game Design Theory

+2

Es posible que desee echar un vistazo a XNA solo para ver cómo funciona el bucle principal del juego. – StrixVaria

+7

No use "meros objetos". Usa lo que tenga sentido. Tu juego no tiene que ser estrictamente OOP. Tiene que funcionar, y debería ser preferiblemente un código agradable y bien estructurado. Ninguno de los dos requiere OOP. Escribe tu juego usando todas las herramientas disponibles. Clases, funciones, funtores, plantillas, programación de procedimientos, programación orientada a objetos, programación funcional, programación genérica, lo que sea que se ajuste a la tarea en cuestión. No te limites a OOP solo porque algunas personas hace 20 años pensaban que era el santo grial. – jalf

Respuesta

19

lectura obligatoria: http://scientificninja.com/advice/write-games-not-engines

¿Por qué cree que necesita un motor de juego? Escribe el código que necesitas para implementar tu juego. Modifíquelo a medida que cambien los requisitos. Y cuando tengas un juego completo, da un paso atrás y mira cómo se ve el resultado.

No puede, y no debe, diseñar un diagrama de clases completo al comienzo. Esboce una idea aproximada de qué componentes generales quiere y cuáles deberían ser sus responsabilidades, y luego intente codificarlos. Comience con las clases de las que está seguro. Tarde o temprano, algunos de ellos se volverán grandes y difíciles de manejar, por lo que se dividirán en muchos más pequeños. A veces, puede encontrar que varias clases básicamente están haciendo lo mismo, por lo que las fusiona nuevamente. Con suerte, tarde o temprano, terminará con un diseño que funciona, que es más de lo que obtendría si intentara diseñar un motor de juego por adelantado.

+0

Me gusta el enfoque try & refactor. Crafting OO design takes experience – theactiveactor

+6

Incluso con experiencia, sigue siendo 1) imposible, y 2) una mala idea para tratar de llegar a un diseño detallado completo * antes * de implementarlo. Hay una razón por la cual toda la cosa "ágil" ha captado tanto. * Encontrará * problemas que nunca había pensado, así que tome las decisiones de diseño cuando tenga la información que necesita, es decir, cuando haya intentado implementarla, y descubra cuáles son todos los peligros. – jalf

4

Si no has hecho un juego antes, ¿cómo puedes hacer un motor? Hay toneladas de motores gratuitos por ahí o pasarás 20 años intentando hacer algo porque estarás reescribiendo una y otra vez.

+0

Sí, lo que hace que un juego sea bueno es el contenido, no el motor, todos los buenos programadores "toman prestado" el código de otras personas cuando pueden – Patrick

3

Hay dos tipos importantes de objetos en un juego. Hay objetos que contienen procesos, y hay objetos que interactúan con el entorno y el usuario.

Para aquellos objetos que ejecutan un proceso como cambiar la opacidad de los objetos, querrás que sean independientes de cualquier variable de nivel de clase. Simplemente deberían tomar el valor (es) y devolver el (los) valor (es). Si tienes un proceso para calcular la gravedad, el proceso debe considerar el objeto sobre el que se calcula la gravedad, y devolver la cantidad de gravedad que el objeto está experimentando, y la dirección de la gravedad si el juego tiene lugar en el espacio.

Los segundos tipos más importantes de objetos son aquellos que interactúan con el usuario y el entorno. Estos objetos deberían ser todos de la misma clase base. La clase base requerirá una imagen, y la posición xey, y puede tener variables que realicen procesos específicos, como cambiar la velocidad o la dirección de la variable. Con esta clase base en su lugar, puede realizar procesos como el proceso de gravedad mencionado anteriormente utilizando todas las variables "incorporadas" de los objetos, como la velocidad, la dirección y la posición xey.

También querrá configurar sus objetos para ejecutar peices de código bajo ciertas condiciones. Puede ser una buena idea que su clase base proporcione funciones que se ejecuten cuando se cumple una de estas condiciones. Algunas funciones condicionales útiles son una función condicional a seguir cuando se crea un objeto por primera vez y cuando se destruye. Una función condicional para ir después de que se establece un temporizador. Un funcional condicional para ir continuamente donde puedes colocar código para dibujar imágenes en la pantalla. Una función condicional para activarse Cuando se presiona un botón del teclado o del mouse.Una función condicional para ejecutar una cantidad determinada de veces por segundo para calcular cosas como la gravedad en un objeto.

Este marco me ha funcionado muy bien al crear juegos. Funciona para cualquier tipo de juego y funciona de manera horrible para otros tipos de programas. Lo siento si mi escritura no está clara, estoy escribiendo en mi iPod y sería difícil para mí volver y editar las cosas aquí.