2009-04-13 16 views
33

Ok, terminé escribiendo mi propio motor de juego basado en XNA, y me pregunto qué más necesito para hacer un motor completo.¿Qué debería estar en un motor de juego 2D?

Esto es lo que hay en el motor:

  • Física (Farseer Física)
  • de partículas del motor (Mercurio de proyecto)
  • Cámaras 2D
  • entrada Manejo
  • Gestión de la pantalla (menús, Pausa Pantalla, etc.)
  • Sprite (Animación, Hojas de Sprite)
  • Y XNA cosas como sonido.

¿Echo de menos algo que podría ser crucial para el motor de un juego?

+1

Nada en contra de esto, sino que probablemente sería mejor publicando esto en los foros de gamedev.net. – ryeguy

+0

Buena (y flexible) detección de colisión. –

+1

detección de colisión se encuentra en el motor Farseer Phsyics –

Respuesta

18

Un tema o mercado para su 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 le ayudará a apuntar en la dirección que necesita para hacer más 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.

Puede hacer que sea general a un punto, pero se da cuenta de que cuanto más generalizado sea su 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.

+0

+1 Un ejemplo perfecto con el motor Unreal: el último remanente. Gran juego (RPG), pero los gráficos eran tan chuggy en puntos que no creería. Todo esto proviene del hecho de que los juegos de rol tienden a tener efectos más bonitos a la vez en comparación con un juego de disparos en primera persona, por lo que deben tener una mejor degradación en el motor de partículas cuando hay múltiples efectos a la vez. –

1

La aceleración 3D debe estar en un motor 2D.

Utilizando el 3d hardware que la mayoría de la gente tiene en estos días es la mejor manera de conseguir un rendimiento sorprendente para sus juegos en 2D ...

+0

¿Tiene un ejemplo de cómo ocurriría eso? –

+1

Xna ya usa 3d acc. Así que esto se construye automáticamente. Realmente esto solo significa que usa el gpu - a mi entender –

+0

De hecho, los XNA Sprites ya están hechos a través de la aceleración 3D, por lo que no tienes que preocuparte por esto. –

6

un par de ideas:

  • inteligencia artificial (tal vez sólo simple AI utilidades, como pathfinding algorithms)
  • Guardando todo o parte del estado del juego (para suspender y reiniciar en un momento posterior o guardar puntajes altos).
+0

AI para un motor de juego genérico es un poco difícil. La IA es demasiado específica para el juego real, así que no estoy seguro de lo útil que sería tratar de crear una genérica que sea parte del motor en sí. – Herms

+0

Estaba pensando más en la línea de simples algoritmos de inteligencia artificial (como un enemigo que siempre se mueve hacia ti), así como utilidades (es decir, algoritmos de determinación de ruta). – gnovice

+0

+1: muy bueno a * tutorial. Gracias por compartirlo. –

12

Un par de cosas más:

  • Encontrar camino - muy útil para la IA
  • AI - posiblemente - depende de la forma genérica desea que el motor sea.
  • Las puntuaciones altas
  • Las repeticiones - hace que las puntuaciones altas mucho más interesante, ya que en realidad puede verlos.
+0

¿Conoces alguna buena biblioteca XNA/C# para buscar rutas? ¿O simplemente recomienda leer los algoritmos involucrados y crear una solución que funcione para el juego en particular? – Venesectrix

+0

Nunca he usado XNA, así que realmente no conozco ninguna buena biblioteca.Estoy seguro de que ya hay muchos geniales, pero a veces es bueno leer acerca de los algoritmos e implementarlos usted mismo. – Zifre

+0

@Venesectrix: Pathfinding (A * es el algoritmo más popular) es muy simple de implementar y hay muchos recursos para ello. Consulte http://www.ziggyware.com/readarticle.php?article_id=162 para obtener una relacionada con XNA. – Noldorin

1
  • marco de Animación de manera que se puede decir: tomar este sprite, moverlo en esta dirección, folowing esta ruta con esta velocidad, la aceleración y tal
  • sistema de interfaz gráfica de usuario básico. No aplicar toda una Windows, pero las cosas básicas como un puntero y un botón, y tal - que sea componente básico
  • depuración para la visualización de FPS, el número de sprites y tal

también una buena cosa es haga algunos juegos, y luego verá rápidamente qué cosas repite haciendo para cada juego, y luego verá cómo puede poner eso en el motor.

0

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.

2

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.

5

Creo que cubrió los requisitos generales de un motor 2D. La única cosa que me pierda en esa lista sería:

  • GUI Biblioteca

también para hacer más fácil los procesos de desarrollo:

También puede agregar otra capa encima de cosas existente de XNA:

  • una implementación de red/Vestíbulo bastante bareboned
  • manejo más abstracta de varios controladores (DROPIN/de deserción durante las sesiones de juego, al igual que ver Resident Evil 5 Coop) - quizás basado en eventos

Finalmente, puede agregar algunos sombreadores "ready2use". Tal vez obtener un poco de inspiración del descontinuado FaceWound (del desarrollador "Garry's Mod").

+1

+1 por mencionar una GUI –

1

Buena detección de colisión 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.

0

Según el tipo de juego de destino, incluya gráficos 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.

La trampa 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: activadores basados ​​

  • Ubicación (jugador entra en un círculo imaginario y algo sucede - escena de colas, inicie emboscada, etc.). Yo diría proporcionar una clase base para el gatillo e implementar algunas básicas para mostrar cómo se hace (es decir, recolecciones de armas, etc.)
  • Algunos motores de juegos implementan redes (aunque esto es una especie de parte de las "cosas xna")
0

Lo más útil para incluir por encima de todo sería herramientas para usar su motor con facilidad. Tal vez use su motor para crear las herramientas. Estoy seguro de que encontrarás muchos defectos de esa manera.

1

Detección de colisiones pixelperfect simple. NO Física Farseer. Rutinas simples de dibujo como drawline, drawcircle, etc.

0

Um. Esta lista es una lista "interna". Hacer un gran motor es hacer una gran lista "externa". Mire 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 del objeto de colisión, etc. Además, para agregar al Organiccat answer, 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)

56

Te estás acercando al revés.

¿Cuál debería ser en su motor es la siguiente:

todo el código que resultó ser común entre su primer y su 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 tenga ese juego, escriba 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 planificar, 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 última instancia, la única forma de determinar si tiene un buen motor es viendo 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.

+1

¡Qué forma más sencilla y bonita de verla, jalf (+1)! Eso dicho; Estoy seguro de que querrás una lista de "características fundamentales" (dependiendo de qué tipo de juego estés haciendo) para empezar, cuando comiences a crear el primero de los dos juegos. – Leif

+1

@Leif: ¿por qué? Si estas características son fundamentales, entonces tendrá que agregarlas en algún momento, de modo que no hay problema en esperar hasta que las necesite. Y quién sabe, tal vez no sean tan fundamentales después de todo. tal vez termines con un juego completo sin esos – jalf

+0

. Veo cómo esto puede tener sentido en algunas situaciones, pero podría ser difícil obtener una sensación algo confiable de "exhaustividad general", el trabajo por delante y tu progreso, sin definir de alguna manera el trabajo requerido para alcanzar su (s) objetivo (s). Creo que tratar de hacer un plan siempre es algo bueno, entonces, uno puede priorizar y dividir el trabajo en porciones delimitadas. Si se hace correctamente, creo que "el plan" puede actuar como un importante punto de referencia y factor de motivación, incluso si realiza cambios a medida que cambian los requisitos del producto. La "planificación implícita", en mi experiencia, ha demostrado ser muy contraproducente. – Leif

2

Un motor de física que puede hacer un movimiento de ola de boob decente a mitad de camino, como en ese juego de baloncesto DOA.

1
  • sistema de iluminación 2d es una buena función avanzada. Puedes usar Krypton para eso.
  • Editor de mapas. O mejor aún compatible con 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 hacer buenas transiciones entre las pantallas.
  • 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.
1

Buen trabajo, (Yo y algunos de mis amigos) estamos trabajando en un motor de juego demasiado en realidad, Ya tenemos todo lo que usted ha mencionado, pero por otra parte tenemos lo siguiente.

  • gestor de audio: una clase simple de manejar la música de fondo y sonidos efectos en XNA.
  • administrador de video: no es complicado, una clase simple para manejar video jugando en XNA.
  • efectos gerente: es responsable de cosas como la floración, falta de definición, colores negro/blanco .. etc

buena suerte :)

Cuestiones relacionadas