Qual è la differenza tra un framework di gioco e un motore di gioco?


23

Qual è la differenza tra un framework di gioco (ad esempio, XNA con C #, SDL per c ++) e un motore di gioco?

I framework di gioco usano i motori? Un motore di gioco racchiude sotto-motori come motori fisici, motori a particelle ecc.? Dovrebbero essere usati insieme o si escludono a vicenda?

Presumo che ci siano motori separati sia per 2D che 3D?


Risposte:


21

In realtà non ci sono definizioni rigide per "motore" o "framework".

In generale, si ritiene che un motore "faccia di più" o abbia più strumenti e relativo supporto rispetto a un framework, che di per sé è spesso solo una raccolta libera di funzionalità correlate esposte attraverso alcune API unificate.

A tal fine, le cose che affermano di essere motori possono usare cose che dichiarano di essere strutture per ottenere funzionalità, ma non sempre è necessario che ciò avvenga. Allo stesso modo, una cosa che afferma di essere un motore di gioco può affermare che le sue parti costitutive (la fisica e il rendering, eccetera) sono implementate con un motore fisico o una struttura fisica. I tipi di tecnologia indicati da entrambi i termini possono essere utilizzati in modo intercambiabile o meno.

Possono esserci "motori" o "framework" per qualsiasi cosa: fisica, suono e sì, persino grafica 2D o 3D.

È davvero solo un problema di terminologia e generalmente non importa molto. Dal punto di vista della funzionalità, una prospettiva incentrata sulla realizzazione del tuo gioco, ciò che dovrebbe importare è se la tecnologia in questione offre o meno ciò di cui hai bisogno per realizzare il tuo gioco. Che si definisca un motore o un framework non avrà alcuna influenza su questo.


11

Definizione semplice che uso: puoi costruire un motore su un framework ma non costruiresti mai un framework su un motore. Uno è lo scheletro che determina l'architettura e il flusso del programma, l'altro è il muscolo che fa il lavoro.

Per un esempio concreto, Artemis è una piccola struttura ordinata per la costruzione di sistemi di componenti, ma non lo chiamereste mai un motore. È possibile costruire Artemis Systems e componenti standard per creare un motore da esso.


1
Nella mia azienda qualcuno ha progettato un framework sul motore. questo framework funge da raccolta di parti mancanti non fornite dal motore, unifica elementi che altrimenti sarebbero un po 'disordinati nel nostro (vecchio) motore. E fornisce aiutanti per facilitare lo sviluppo.
v

2

Un framework è una raccolta di librerie (di solito) di livello inferiore e materiale di supporto che puoi usare per fare qualunque cosa tu voglia (grafica, suoni, ecc.). Non c'è nulla di correlato al gioco in un framework tranne che di solito sono ottimizzati o progettati per fare cose che sono comuni nei giochi.

Esempio: un motore ti consente di avere un elenco di entità, ognuna con una posizione sulla mappa. Un framework consente di eseguire il rendering di un oggetto 3d in una determinata posizione.

Quindi li connetti dando ad ognuna delle tue entità un oggetto 3d e le rendi quando necessario.

E ta-da, hai un gioco.


2

Per una spiegazione davvero dettagliata ti consiglio di leggere l'unica bibbia di Game Engine Architecture di Jason Gregory. Immagino sia il lavoro più completo su questo argomento da quando è stato pubblicato. Gestisce non solo la parte C ++ ma anche e importante per ogni programmatore di motori di gioco la teoria / architettura alla base. È un buon punto di partenza indipendente dalla lingua. Per avere una visione d'insieme di cosa stiamo parlando è questa immagine del libro

Lasciami provare a rispondere alla domanda.

Qualunque cosa tu scriva, sarà un codice :-) dopo anni di esperienza, scrivi ciò di cui hai bisogno e come ne hai bisogno o usa ciò che ti fornisce ciò di cui hai bisogno.

I termini motore e framework derivano dall'architettura software insieme ad altri termini. Quindi cominciamo con i termini di base e spostiamoci verso l'alto.


Biblioteca

Esempi tipici: una libreria matematica che fornisce tutti i tipi e le funzioni di base per i calcoli matematici (Vector, Matrix, ...) o la libreria di immagini (jpeg o png) che fornisce la funzionalità per la scrittura di immagini jpeg o png

In Unity 3D Math è un libray matematico.

Teoria: un libray fornisce funzioni dedicate intorno a un argomento (ad esempio matematica) E viene chiamato dal programmatore su richiesta .

Qualche anteprima: ci possono essere librerie che contengono framework, ovvero una libreria di framework.


Struttura

Teoria: un framework introduce un'inversione di controllo . Ciò significa che lo sviluppatore il più delle volte non chiama i metodi del framework ma il framework chiama il codice dello sviluppatore. Le eccezioni sono quando devi integrare la libreria del framework nel tuo codice e devi avviare il framework. Una libreria di framework fornisce tutti i metodi, le funzioni e le interfacce per un framework con un uso dedicato. Quindi i framework possono essere in una libreria.

Esempio tipico: Unity 3D MonoBehaviour fornisce metodi come Awake, Start, OnUpdate. Lo sviluppatore implementa questi metodi e quindi questi metodi vengono chiamati dal framework (game object management) (questa è l'inversione del controllo) . Lo stesso con i metodi OnCollisionEnter, OnCollisionExit. Sono nello stesso comportamento monocromatico, ma scommetto che sono chiamati dal framework fisico.


Un'anteprima: Engine, Runtime, Editor, SDK

Poiché il termine motore è sempre stato piuttosto vago e lo è ancora (e non migliora con ulteriori sviluppi tecnologici) alcune spiegazioni in anteprima.

Il termine motore è usato per più cose e non si può dire in modo univoco quale sia giusto. Nel 2004, quando ho avuto il primo contatto con la scrittura di motori di gioco, era anche vago. Avevi un motore di gioco nel senso di una sorta di codice che caricava dati predefiniti e ti consentiva di giocare. Poiché carica dati predefiniti, sono stati chiamati motori basati sui dati. Li compili una volta e i dati esterni avrebbero potuto essere giochi diversi senza ricompilarli. Ad un certo punto questo era lo stesso di un runtime.

L'editor è chiaro. Ti consente di definire i dati predefiniti caricati dal motore / runtime.

Un motore con un editor era chiamato SDK (ad esempio Hammer SDK).

Quindi c'erano / sono motori dedicati. Un motore phyiscs, un motore di rendering, un motore audio, un motore di gestione degli oggetti di gioco, un motore di rete, ....

Secondo la mia opinione personale, questi non sono motori (in particolare un motore di rendering NON È un motore di gioco poiché esegue solo il rendering). Quando utilizzo il motore di gioco di Google, i risultati contengono motori di rendering puri al 90% che non sono motori di gioco. Vorrei chiamare tutte queste librerie ma poiché potrebbero caricare dati predefiniti corrisponderebbero al termine motore basato sui dati.

Un'ultima breve nota a margine prima di entrare nei dettagli: mi sono laureato con successo con un master in informatica. La mia tesi di laurea ha trattato l'argomento "come sviluppare il nucleo di un motore di gioco". Significa la parte del codice che identifica tutti gli altri motori, fa la gestione degli oggetti di gioco, il loop di gioco, ecc ...

Ho pubblicato la mia tesi di laurea come un (breve) libro. L'unico commento su Amazon da parte di un acquirente / lettore è (dopo alcuni anni): non si tratta di un motore di gioco. Da quando mi sono laureato con successo e quindi ho difeso la mia tesi contro 3 programmatori esperti (2 dei quali dedicati a giochi e applicazioni interattive), credo di aver scritto un motore di gioco.


editore

Semplice: consente di definire i dati nel formato richiesto dalle altre parti e quindi elimina la richiesta di scrivere manualmente quei file o utilizzare strumenti esterni per crearli.

Questo è ciò che fa l'editor Unity 3D.


Runtime

Questo termine viene spesso usato allo stesso modo con il motore (che può essere corretto o errato).

Il runtime esegue i dati generati e fa ciò che ha a che fare con i dati. Ad esempio, mostrarti il ​​gioco e lasciarti giocare. Non crea alcun dato (tranne forse il salvataggio di giochi) nel senso che non è possibile modificare il gioco stesso con esso.

Unity Web Player è / era un runtime che ti consente di giocare ai giochi Unity in un browser web.

Puoi caricare ed eseguire più giochi diversi con lo stesso runtime.

Nel caso dell'API di scripting Unity 3D esiste un taglio tra funzionalità che funzionerà nel gioco e funzionalità che funzionerà solo all'interno dell'editor.


SDK

Questo termine viene spesso chiamato anche quadro .

All'epoca un SDK era un insieme di strumenti come un editor, IDE (ambiente di sviluppo integrato) per programmatori, esportatori di formati di dati e runtime / motore.

Quindi un SDK / framework ti fornisce un flusso di lavoro e utility predefiniti e ti mostra un modo (ben progettato) di come puoi (facilmente) creare un gioco.

Fondamentalmente il motore Unity 3D sarebbe sbagliato dal momento che si adatterebbe di più nella direzione dell'SDK. Ma poiché Unity è ancora di più, è necessaria una nuova parola / definizione per abbinare ciò che è.

Ad ogni modo, per introdurre l'altro termine, un SDK / framework fornisce una pipeline di sviluppo di giochi predefinita (non solo una pipeline di risorse ma forse, come Unity, una pipeline di risorse, logica, build, implementazioni, ....)


Motore

sarcasmo su Usato per tutto poiché tutti vogliono essere cool scrivendo non solo una libreria, un framework o un gioco, ma meglio scrivendo un motore completo. sarcasmo fuori

Attiviamolo:

Un motore

  1. è un pezzo di codice / software
  2. è destinato a essere riutilizzato in più progetti (puoi anche scrivere un motore di gioco per un solo gioco)
  3. per essere riutilizzato, il motore di gioco separa la parte riutilizzabile dalla parte specifica del gioco
  4. per essere riutilizzabili (in base al modo in cui è previsto il riutilizzo) esistono diversi gusti come un motore basato su dati che carica dati esterni

Un motore può essere composto da più motori (dal momento che tutto è chiamato un motore al giorno d'oggi). Un motore di gioco può includere

  • un motore di rendering che esegue il rendering (DI NUOVO: dannazione, inferno: il codice che esegue solo il rendering NON È un motore di gioco)
  • un motore fisico che fa la fisica (è un motore fisico, non un motore di gioco)
  • un motore AI che gestisce le cose AI (è un motore AI e non un motore di gioco)
  • un motore di rete (ad esempio RakNet) che fa le cose di rete (è un motore di rete, non un motore di gioco)
  • un motore audio che fa le cose audio (è un motore audio e non un motore di gioco)

Un esempio per un'applicazione basata su un motore principale che fornisce un framework basato su plug-in per mettere insieme tutto in un modello di gestione degli oggetti di gioco basato su componenti. Ogni sottomarino (rendering audio) è un modulo aggiunto al motore di gioco come plug-in. Ogni componente può far parte di un sottomarino / modulo. E la gestione degli oggetti di gioco (basata su componenti) è il collegamento di collegamento tra i moduli separati.

inserisci qui la descrizione dell'immagine


Il definon più vicino per Game Engine

Un motore di gioco è la parte del codice sorgente del gioco che fornisce tutte le funzionalità che devono essere riutilizzate in più giochi e che consentono di codificare ed eseguire il gioco. Pertanto indaga insieme tutte le altre parti del codice (rendering, audio, fisica, gestione degli oggetti di gioco, reti) che sono librerie, framework o motori dedicati (rendering, fisica, ...).

Il motore di gioco è nel bel mezzo.



0

Come già affermato da @Josh, non esiste una definizione rigorosa di framework o motore ma, in senso concettuale, entrambi sono strumenti molto diversi.

Un framework contiene un'abilità di base API con cui lavorare, che offre all'utente strumenti di livello superiore per interagire con la piattaforma o la funzionalità senza (generalmente) preoccuparsi di prestazioni, compatibilità, ecc. Negli esempi forniti, SDL è un framework, che fornisce interrompi la piattaforma e puoi creare il tuo software dietro quel livello senza preoccuparti della gestione delle finestre, delle cose specifiche del sistema operativo, ecc. Se vuoi costruire un intero software, avrai bisogno di quadri diversi, per SDL per gestire i media e cose della piattaforma, Box2D per gestire la fisica, ecc.

Un motore è diverso, in questo caso lo strumento fornisce tutto il necessario per lo sviluppo, un motore fisico ti fornirà tutto il necessario per gestire la fisica e ti fornirà un'API di facile utilizzo, quindi, se vuoi costruire una simulazione fisica, non avrai bisogno di altre librerie di terze parti. I motori non sono altro che una raccolta di framework, altri motori, interfacce, frammenti e codice generale che forniscono tutto il necessario per completare il progetto senza bisogno di altre terze parti né preoccuparsi di cose di livello inferiore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.