c# - motores - ¿Qué debería estar en un motor de juego en 2D?
unity (16)
Ok, terminé escribiendo mi propio motor de juego basado en XNA, y me pregunto qué más necesito para hacer un motor completo.
Esto es lo que hay en el motor:
- Física (Física Farseer)
- Particle Engine (Mercury Project)
- Cámaras 2D
- Manejo de entrada
- Gestión de pantalla (menús, pantalla de pausa, etc.)
- Sprite (Animación, Hojas de Sprite)
- Y cosas de XNA como Sound.
¿Me estoy perdiendo algo que podría ser crucial para el motor de un juego?
Algunas cosas más:
- Búsqueda de ruta - muy útil para AI
- AI - posiblemente - depende de qué tan genérico quieras que sea el motor.
- Puntuaciones altas
- Repeticiones : hace que los puntajes altos sean mucho más interesantes, ya que puedes verlos realmente.
Buen trabajo, nosotros (yo y algunos de mis amigos) también estamos trabajando en un motor de juego. Ya tenemos todo lo que mencionas, pero además tenemos lo siguiente.
- audio manager : una clase simple para manejar música de fondo y efectos de sonido en XNA.
- administrador de videos : no es complicado, una clase simple para manejar videos que se reproducen en XNA.
- gerente de efectos : es responsable de cosas como floración, desenfoque, colores blanco / negro ... etc.
Buena suerte :)
Creo que cubriste los requisitos generales de un motor 2D. Lo único que extrañaría de esa lista sería:
- Biblioteca GUI
También para facilitar los procesos de desarrollo:
- Motor de scripts (LUA, script C #, ...)
- Activos actualizados dinámicamente (ver entrada de blog de Nick Gravelyn )
También puede agregar otra capa encima de las cosas existentes de XNA:
- Una implementación de Red / Lobby bastante deshilachada
- Manejo más abstracto de múltiples controladores (DropIn / DropOut durante las sesiones de juego, como ver Resident Evil 5 Coop) - quizás basado en eventos
Finalmente, puede agregar algunos sombreadores de "ready2use". Tal vez obtener algo de inspiración de FaceWound descontinuado (del desarrollador "Garry''s Mod").
Depende del juego, pero otra cosa que a menudo se necesita es un buen marco de trabajo en red.
Muchos juegos modernos, incluidos los juegos en 2D, parecen tener algún tipo de conexión en red.
Dependiendo del tipo de juego objetivo, incluya Gráfico (s) de navegación con anotaciones de nodo y borde. (Bueno para muchos juegos, pero no tanto para los scrollers laterales token que están hechos con motores de gráficos 2D)
- Un componente para generarlos (a través de un algoritmo de relleno de inundación).
- Asegúrese de incluir todos los principales algoritmos de búsqueda / planificación de ruta (A * / Dijkstra / etc.) Para recorrer esos gráficos.
El inconveniente de esto es que tendrá que definir qué es un ''mapa'' para el motor, lo que podría limitar a los usuarios del motor.
Cosas relacionadas:
- Desencadenantes basados en la ubicación (el jugador ingresa en un círculo invisible y ocurre algo: pone en cola una escena, inicia una emboscada, etc.). Yo diría que proporcione una clase base para el gatillo e implemente algunos básicos para mostrar cómo se hace (es decir, recolecciones de armas, etc.)
- Algunos motores de juegos implementan redes (aunque esto es una especie de "xna stuff")
Detección de colisiones pixelperfect simple. NO Física Farseer. Rutinas simples de dibujo como drawline, drawcircle, etc.
La aceleración 3D debe estar en un motor 2D.
Usar el hardware 3d que la mayoría de la gente tiene actualmente es la mejor manera de obtener un rendimiento increíble para tus juegos en 2D ...
La buena detección de colisiones es muy útil. Si lo implementa de manera eficiente, realmente reduce el tiempo requerido para cada cuadro. Además de eso, en mi motor (para Pygame) tengo un método para separar la pantalla principal en varias subpantallas, lo que me parece útil.
Lo más útil para incluir por encima de todo sería herramientas para usar su motor fácilmente. Tal vez use su motor para crear las herramientas. Estoy seguro de que encontrarás muchos defectos de esa manera.
Te estás acercando de una manera al revés.
Lo que debe estar en su motor es el siguiente:
Todo el código que resultó ser común entre tu primer y tu segundo juego.
Primero, escribe un juego. No escriba un motor, porque, como ha descubierto, no sabe qué debe contener ni cómo debe diseñarse. Escribe un juego en su lugar.
Una vez que tengas ese juego, escribe otro juego. Luego, cuando hayas hecho eso, examina el código del segundo juego. ¿Cuánto fue reutilizado desde el primer juego?
Todo lo que se volvió a utilizar se debe refactorizar en un proyecto separado. Ese proyecto ahora es tu motor de juego.
Esto no significa que no deba planear, o no intente escribir un buen código. Pero asegúrese de estar trabajando para algo concreto, algo en lo que pueda distinguir una buena implementación de una mala. Una buena implementación de un juego, es una que funciona, es divertida y no falla. Escribe tu código para lograr esas cosas primero.
Una buena implementación de un motor? Eso es más complicado. ¿Cuál es una buena implementación de un renderizador? De un marco de AI? De un sistema de partículas? En definitiva, la única manera de determinar si tienes un buen motor es ver qué tan bien funciona en un juego real . Entonces, si no tienes un juego, no tienes forma de evaluar tu motor. Y si no tiene forma de evaluar su motor, no tiene forma de juzgar si alguna parte del código que está escribiendo es realmente útil.
Um. Esta lista es una lista "interna". Hacer un gran motor es hacer una gran lista "externa". Mira UE3, por ejemplo, está aquí gracias a las excelentes herramientas. Necesita herramientas para la creación mundial, para crear paquetes óptimos de recursos (también debe estar en la lista interna ;-)), para la especificación de objetos de colisión, etc. Además, para agregar a la respuesta de Organiccat debe decidir sobre el nivel tecnológico. Puedes buscar sprites simples o puedes desear efectos sofisticados (por lo que se necesitan sombreadores, y con esto necesitas infraestructura)
Un par de ideas:
- Inteligencia artificial (quizás solo utilidades de IA simples, como algoritmos de determinación de ruta )
- Guardando todo o parte del estado del juego (para suspender y reiniciar en un momento posterior o guardar puntuaciones altas).
Un tema o mercado para tu motor. Si está haciendo algo más que su básico motor de gráficos básico, querrá concentrarse en un mercado para su motor, como RPG, estrategia, rompecabezas, plataformas, acción o FPS (vale, no FPS).
Esto lo ayudará a apuntar en la dirección que necesita para realizar nuevas mejoras en el motor sin preguntarnos. Un motor como digamos, el Unreal Engine, puede hacer muchas cosas, pero lo que tiende a hacer mejor es para lo que está hecho, los juegos de FPS. Del mismo modo, debe adaptar su motor para que se adapte a un campo de interés particular, y por lo tanto, se recoge para ese tipo de juego.
Puedes generalizarlo hasta cierto punto, pero date cuenta de que cuanto más generalizado sea tu motor, más difícil será programarlo, tanto en lo que respecta al tiempo como a la habilidad. Es menos probable que otros programadores busquen un motor general (a menos que eso sea todo) si hay una plataforma más específica disponible. O simplemente escriba su propia versión ya que modificar un motor generalizado es tan difícil como crear uno propio.
Una herramienta de repetición de mosaico Algo que le permite al usuario agregar / crear un mosaico y manipular los bordes para un patrón de repetición suave.
- El sistema de iluminación 2d es una buena característica avanzada. Puedes usar Krypton para eso.
- Editor de mapas O mejor aún, soporte cualquier formato de mapa de mosaico, compatible con " Tiled Map Editor ". Entonces puedes usar Tiled.
- Programador / temporizador para acciones del juego.
- Efectos de borrado de pantalla como el cambio de página, el fundido de salida, etc. para realizar agradables transiciones entre las pantallas.
- Las capas de juego con construcción en paralaje también serían útiles.
- En la consola de juegos para procesar comandos o scripts sin reiniciar.
- Carga fácil para atlas de textura como sprites o animación.
- Marco de animación para que puedas decir: toma este sprite, muévelo en esta dirección, siguiendo este camino usando esta velocidad, aceleración y tal
- Sistema básico de GUI. No implemente todo un Windows, pero cosas básicas como un puntero y un botón, y tal - mantenerlo básico
- Componente de depuración para mostrar FPS, números de sprites y tal
También es bueno hacer algunos juegos, y luego verás rápidamente qué cosas repites para cada juego, y luego verás cómo se puede conseguir eso en el motor.