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
Respuesta
Eberly 3D Game Engine Architecture y 3D Game Engine Design son bastante pesados en la teoría, pero cubren todas las bases bastante bien.
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.
Me gusta el enfoque try & refactor. Crafting OO design takes experience – theactiveactor
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
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.
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
http://fivedots.coe.psu.ac.th/~ad/jg/
Este tipo establece un buen estilo de programación orientada a objetos y a través del libro le ayuda a construir un bastidor del motor. Es perfecto en cosas buenas.
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í.
- 1. Card Game Player Class OOP Design
- 2. OOP Design for Card Game Classes
- 3. Corona LUA y OOP Design
- 4. OOP Design - Where/Where do Validate properties?
- 5. ¿Puedes recomendar un podcast en OOP & Design?
- 6. PHP OOP Theory - ¿Error al verificar dentro o fuera de la clase?
- 7. Set Theory y .NET
- 8. Ray-box Intersection Theory
- 9. Theory vs Test Nunit
- 10. UITableView dequeueReusableCellWithIdentifier Theory
- 11. OO Design vs Database Design
- 12. JUnit theory for hashCode/equals contract
- 13. Game Architecture
- 14. Backbone Design
- 15. Esto es OOP o como OOP
- 16. Escribiendo mi propio 3D Game Engine
- 17. XNA game tutorial
- 18. iOS Game Engine
- 19. .NET Game Server
- 20. Game Center InviteFailed
- 21. Estrategia Game Server Concept
- 22. Java 3D Game Engine?
- 23. Android Multitouch Game
- 24. Diseño de Game Objects
- 25. Game Center Formatting Time
- 26. Android Game Framework
- 27. JavaScript game framework
- 28. Game UI HUD
- 29. Asp.NET Real Time Game
- 30. Game Oriented Assembler Lisp
Es posible que desee echar un vistazo a XNA solo para ver cómo funciona el bucle principal del juego. – StrixVaria
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