¿Cuál es la diferencia entre un marco de juego (por ejemplo, XNA con C #, SDL para c ++) y un motor de juego?

¿Los frameworks de juegos usan motores? ¿Un motor de juego encapsula submotores como motores de física, motores de partículas, etc.? ¿Deben usarse juntos o son mutuamente exclusivamente?

¿Supongo que hay motores separados para 2D y 3D?

Comentarios

Respuesta

Realmente no hay definiciones estrictas para «motor» o «marco».

En términos generales, se considera que un motor «hace más» o tener más herramientas y soporte relacionado que un marco, que a menudo es solo una colección suelta de funcionalidades relacionadas expuestas a través de alguna API unificada.

Con ese fin, las cosas que dicen ser motores pueden usar cosas que afirman ser marcos para lograr la funcionalidad, pero no siempre es necesario que sea el caso. De manera similar, una cosa que dice ser un motor de juego puede afirmar que sus partes constituyentes (la física y el renderizado, etc.) se implementan con un motor de física o un marco de física. Los tipos de tecnología a los que se refieren ambos términos se pueden utilizar indistintamente o no.

Puede haber «motores» o «marcos» para casi cualquier cosa: física, sonido y sí, incluso gráficos 2D o 3D.

En realidad, es solo una terminología problema, y generalmente no importa mucho. Desde una perspectiva de funcionalidad, una perspectiva centrada en hacer tu juego, lo que debería importar es si la tecnología en cuestión ofrece o no lo que necesitas para hacer tu juego. Si se llama a sí mismo un motor o un marco no tendrá nada que ver con eso.

Respuesta

Definición simple que yo uso : puedes construir un motor en un marco pero nunca construirías un marco en un motor. Uno es el esqueleto que determina la arquitectura y el flujo del programa, el otro es el músculo que hace el trabajo.

Para un concreto Por ejemplo, Artemis es un marco pequeño y ordenado para la construcción de sistemas de componentes, pero nunca lo llamaría un motor. Podrías construir Artemis Systems y componentes estándar para crear un motor a partir de él.

Comentarios

  • En mi empresa, alguien diseñó un marco sobre el motor. este marco sirve como una colección de partes faltantes que el motor no ‘ no proporciona, unifica cosas que de otra manera estarían un poco desordenadas en nuestro (antiguo) motor. Y proporciona ayudantes para facilitar el desarrollo.

Respuesta

Un marco es una colección de (generalmente) bibliotecas de nivel inferior y cosas de ayuda que puedes usar para hacer lo que quieras (gráficos, sonidos, etc.). No hay nada relacionado con el juego en un framework, excepto que normalmente están optimizados o diseñados para hacer cosas que son comunes en los juegos.

Ejemplo: un motor te permite tener una lista de entidades, cada una con una posición en el mapa. Un marco te permite renderizar un objeto 3D en una posición determinada.

Así que los conectas dando a cada una de tus entidades un objeto 3D, y los renderizas cuando sea necesario.

Y ta-da, tienes un juego.

Respuesta

Para una explicación realmente detallada, recomiendo leer el sólo la Biblia Game Engine Architecture de Jason Gregory. Supongo que es el trabajo más completo sobre este tema desde que se publicó. No solo se ocupa de la parte de C ++, sino También es importante para todos los programadores de motores de juegos la teoría / arquitectura que hay detrás. Es un buen punto de partida independiente del lenguaje. Para tener una visión general de lo que estamos hablando es esta imagen del libro

Déjame intentarlo para responder la pregunta.

Cualquier cosa que escriba será código 🙂 después de años de experiencia, escriba lo que necesita y cómo lo necesita o use lo que le proporcione lo que necesita.

Los términos motor y framework ven de la arquitectura de software junto con otros términos. Así que comencemos con los términos básicos y vayamos hacia arriba.


Biblioteca

Ejemplos típicos: una biblioteca matemática que proporciona todos los tipos y funciones básicos para cálculos matemáticos (Vector, Matrix, …) o una biblioteca de imágenes (jpeg o png) que proporciona la funcionalidad para escribir imágenes jpeg o png

En Unity 3D Math es una biblioteca de matemáticas.

Teoría: una biblioteca proporciona funciones dedicadas en torno a un tema (por ejemplo, matemáticas ) Y es llamado por el programador a pedido .

Alguna vista previa: puede haber bibliotecas que contengan marcos, también conocidos como bibliotecas de marcos.


Framework

Teoría: Un marco introduce una inversión de control . Esto significa que el desarrollador la mayor parte del tiempo no llama a los métodos del marco, pero el marco llama al código del desarrollador. Las excepciones son cuando tiene que integrar la biblioteca del marco en su código y debe iniciar el marco. Una biblioteca de marco proporciona todos los métodos, funciones e interfaces para un marco con un uso dedicado. Por lo tanto, los marcos pueden estar en una biblioteca.

Ejemplo típico: Unity 3D MonoBehaviour proporciona métodos como Awake, Start, OnUpdate. El desarrollador implementa estos métodos y luego estos métodos son llamados por el marco (gestión de objetos del juego) (esto es la inversión del control) . Lo mismo ocurre con los métodos OnCollisionEnter, OnCollisionSalir. Están en el mismo Monobehaviour pero apuesto a que son llamados por el framework de física.


Una vista previa: Engine, Runtime, Editor, SDK

Dado que el término motor siempre fue un poco vago y todavía es (y no mejora con más desarrollos tecnológicos) una explicación preliminar.

El término motor se usa para múltiples cosas y no se puede decir de manera única cuál es la correcta. En 2004, cuando tuve contacto por primera vez con la escritura de motores de juegos, también era vago. Tenías un motor de juego en el sentido de una especie de código que cargaba datos predefinidos y te dejaba jugar. Dado que carga datos predefinidos, se denominaron motores basados en datos. Los compila una vez y los datos externos podrían haber sido juegos diferentes sin volver a compilarlos. En algún momento, esto fue lo mismo que un tiempo de ejecución.

El editor es claro. Le permite definir los datos predefinidos cargados por el motor / tiempo de ejecución.

Un motor con un editor se llamaba SDK (por ejemplo, Hammer SDK).

Luego estaban / hay motores dedicados. Un motor phyiscs, motor de renderizado, motor de sonido, motor de administración de objetos de juego, motor de red, ….

En mi opinión personal, esos no son motores (especialmente un motor de renderizado NO ES un motor de juego ya que solo representación). Cuando utilizo el motor de juegos de Google, los resultados contienen un 90% de motores de renderización puros que no son motores de juegos. Los llamaría bibliotecas a todos, pero dado que pueden cargar datos predefinidos, coincidirían con el término motor impulsado por datos.

Una última nota al margen antes de entrar en detalles: me gradué con éxito con una maestría en Ciencias de la Computación. Mi tesis de maestría trató el tema «cómo desarrollar el núcleo de un motor de juego». Es decir, la parte del código que une a todos los demás motores, hace la gestión de los objetos del juego, el ciclo del juego, etc.

Publiqué mi tesis de maestría como un libro (corto). El único comentario sobre Amazon de un comprador / lector es (después de unos años): no se trata de un motor de juego. Desde que me gradué con éxito y por lo tanto he defendido mi tesis contra 3 programadores experimentados (2 de ellos dedicados a juegos y aplicaciones interactivas) creo que he escrito un motor de juego.


Editor

Fácil: le permite definir los datos en el formato que las otras partes los requieren y por lo tanto elimina la demanda de escribir esos archivos a mano o use herramientas externas para crearlos.

Esto es lo que hace el editor Unity 3D.


Runtime

Este término a menudo se usa igualmente con el motor (que puede ser correcto o incorrecto).

El tiempo de ejecución ejecuta los datos generados y hace lo que tiene que ver con los datos. Por ejemplo, mostrarle el juego y dejarlo jugar. No crea ningún dato (excepto quizás juegos guardados) en el sentido de que no puede modificar el juego en sí mismo con él.

El Unity Web Player es / era un tiempo de ejecución que le permite jugar juegos de Unity dentro de un navegador web.

Puedes cargar y ejecutar varios juegos diferentes con el mismo tiempo de ejecución.

En el caso de la API de scripting de Unity 3D hay un corte entre la funcionalidad que funcionará en el juego y la funcionalidad que solo funcionará dentro del editor.


SDK

Este término se suele llamar también marco .

En aquel entonces, un SDK era un conjunto de herramientas como un editor, IDE (entorno de desarrollo integrado) para programadores, exportadores de formatos de datos y el tiempo de ejecución / motor.

Por lo tanto, un SDK / marco le proporciona un flujo de trabajo y utilidades predefinidos y le muestra una forma (bien diseñada) cómo puedes crear (fácilmente) un juego.

Básicamente, el motor Unity 3D sería incorrecto ya que encajaría más en la dirección del SDK. Pero dado que Unity es aún más, se necesita una nueva palabra / definición para que coincida con lo que es.

De todos modos, para introducir el otro término, un SDK / framework te proporciona una tubería de desarrollo de juegos predefinida (no solo un activo canalización, pero tal vez, como Unity, una canalización de activos, lógica, compilaciones, implementaciones, ….)


Engine

sarcasmo en Se usa para todo, ya que todos quieren ser geniales escribiendo no solo una biblioteca, un framework o un juego, sino mejor escribiendo un motor completo. sarcasm off

Activémoslo:

Un motor

  1. es una pieza de código / software
  2. que está destinado a ser reutilizado en múltiples proyectos (también puede escribir un motor de juego para un solo juego)
  3. para ser reutilizado, el motor de juego separa la parte reutilizable de la parte específica del juego
  4. para ser reutilizable (dependiendo de cómo es destinado a ser reutilizado) hay diferentes sabores como un motor controlado por datos cargando datos externos

Un motor puede constar de varios motores (ya que en la actualidad a todo se le llama motor). Un motor de juego puede incluir

  • un motor de renderizado que hace el renderizado (OTRA VEZ: dios, maldición, infierno: el código que solo hace renderizado NO ES un motor de juego)
  • un motor de física haciendo la física (es un motor de física, no un motor de juego)
  • un motor de IA que maneja las cosas de IA (es un motor de IA y no un motor de juego)
  • un motor de red (por ejemplo, RakNet) haciendo las cosas de la red (es un motor de red, no un motor de juegos)
  • un motor de audio que hace las cosas de audio (es un motor de audio y no un motor de juegos)

Un ejemplo de una aplicación basada en un motor central que proporciona un marco de trabajo basado en complementos para unir todo en un modelo de gestión de objetos de juego basado en componentes. Cada submotor (renderizado de audio) es un módulo agregado al motor del juego como complemento. Cada componente puede ser parte de un submotor / módulo. Y la gestión de objetos del juego (basada en componentes) es el enlace de conexión entre los módulos separados.

ingrese la descripción de la imagen aquí


La definición más cercana para Game Engine

Un motor de juego es parte del código fuente de tu juego que proporciona toda la funcionalidad que es destinado a ser reutilizado en varios juegos y te permite codificar y ejecutar tu juego. Por lo tanto, reúne todas las demás partes del código (renderizado, audio, física, gestión de objetos del juego, redes) que son ya sea bibliotecas, frameworks o motores dedicados (renderizado, física, …).

El motor del juego es el desastre en el medio.


Respuesta

Como ya dijo @Josh, no existe una definición estricta de framework o motor pero, en un sentido conceptual, ambas son herramientas muy diferentes.

Un marco contiene una abastracción API básica con la que trabajar, lo que le brinda al usuario herramientas de mayor nivel para interactuar con la plataforma o la funcionalidad sin (generalmente) preocuparse por el rendimiento, la compatibilidad, etc. En los ejemplos que proporcionó, SDL es un marco, proporciona abstarction sobre la plataforma, y puede construir su software detrás de esa capa sin preocuparse por la gestión de ventanas, cosas específicas del sistema operativo, etc. Si desea crear un software completo, necesitará diferentes frameworks, fe SDL para administrar los medios y la plataforma, Box2D para administrar la física, etc.

Un motor es diferente, en este caso, la herramienta incluye todo lo necesario para el desarrollo, un motor de física te proporcionará con todo lo necesario para administrar la física y enviará una API fácil de usar, por lo que, si desea crear una simulación de física, no necesitará ninguna otra biblioteca de terceros. Los motores no son más que una colección de marcos, otros motores, interfaces, fragmentos y código general que proporciona todo lo necesario para completar el proyecto sin necesidad de otros terceros ni preocuparse por cosas de nivel inferior.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *