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 utilizzano motori? Un motore di gioco incapsula motori secondari come motori fisici, motori a particelle, ecc.? Devono essere usati insieme o sono reciprocamente esclusivi?
Immagino che ci siano motori separati sia per 2D che per 3D?
Commenti
Risposta
Non ci sono davvero definizioni rigide per “motore” o “framework”.
In generale, si ritiene che un motore “faccia di più” o avere più strumenti e supporto correlato rispetto a un framework, che è di per sé spesso solo una raccolta di funzionalità correlate esposte attraverso alcune API unificate.
A tal fine, le cose che si dichiarano motori possono utilizzare cose che affermano di essere framework per ottenere funzionalità, ma non è sempre necessario che sia così. 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 un framework fisico. 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ì, anche grafica 2D o 3D.
È solo una terminologia problema, e generalmente non importa molto. Dal punto di vista della funzionalità, una prospettiva incentrata sulla creazione del gioco, ciò che dovrebbe importare è se la tecnologia in questione offre ciò di cui hai bisogno per creare il tuo gioco. Che si definisca un motore o un framework non avrà alcun rapporto con questo.
Answer
Semplice definizione che uso : puoi costruire un motore su un framework ma non costruiresti mai un framework su un motore. Uno è lo scheletro che determina larchitettura e il flusso del programma, laltro è il muscolo che fa il lavoro.
Per un concreto Ad esempio, Artemis è una piccola struttura ordinata per la costruzione di sistemi di componenti, ma non lo chiameresti mai un motore. Potresti costruire Artemis Systems e componenti standard per creare un motore da esso.
Commenti
- Nella mia azienda qualcuno ha progettato un framework sul motore. questo framework serve come una raccolta di parti mancanti che il motore ‘ non fornisce, unifica cose che altrimenti sarebbero un po disordinate nel nostro (vecchio) motore. E fornisce helper per facilitare lo sviluppo.
Risposta
Un framework è una raccolta di (solitamente) librerie di livello inferiore e cose di aiuto che puoi usare per fare tutto quello che vuoi (grafica, suoni, ecc.). Non cè nulla di correlato al gioco in un framework tranne che “di solito è ottimizzato o progettato per fare cose comuni nei giochi.
Esempio: un motore ti permette di avere un elenco di entità, ciascuna con una posizione sulla mappa. Un framework ti consente di eseguire il rendering di un oggetto 3D in una determinata posizione.
Quindi li connetti dando a ciascuna delle tue entità un oggetto 3D e renderli quando necessario.
E ta-da, hai un gioco.
Risposta
Per una spiegazione davvero dettagliata, consiglio di leggere quella e solo la bibbia Game Engine Architecture di Jason Gregory. Immagino che sia il lavoro più completo su questo argomento da quando è stato pubblicato. Non gestisce 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 indipendentemente dal linguaggio. Per avere una panoramica di ciò di cui stiamo parlando è questa immagine dal libro
Provo a rispondere alla domanda.
Qualunque cosa tu scriva sarà 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 come dallarchitettura software insieme ad altri termini. Quindi iniziamo con i termini di base e spostiamoci verso lalto.
Libreria
Esempi tipici: una libreria matematica che fornisce tutti i tipi e le funzioni di base per calcoli matematici (Vector, Matrix, …) o libreria di immagini (jpeg o png) che fornisce la funzionalità per scrivere immagini jpeg o png
In Unity 3D Math è una libreria di matematica.
Teoria: una libreria fornisce funzionalità dedicate su un argomento (ad es. ) E viene chiamato dal programmatore su richiesta .
Qualche anteprima: ci possono essere librerie che contengono framework, ovvero una libreria di framework.
Framework
Teoria: un framework introduce un inversione del controllo . Ciò significa che lo sviluppatore la maggior parte delle volte non chiama i metodi del framework ma il framework chiama il codice dello sviluppatore. Le eccezioni si verificano quando è necessario integrare la libreria del framework nel codice e avviare il framework. Una libreria di framework fornisce tutti i metodi, le funzioni e le interfacce per un framework con un utilizzo 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 (gestione degli oggetti di gioco) (questa è linversione del controllo) . Lo stesso con i metodi OnCollisionEnter, OnCollisionExit. Sono nello stesso Monobehaviour ma scommetterei che sono chiamati dal framework fisico.
Unanteprima: Engine, Runtime, Editor, SDK
Poiché il termine motore è sempre stato un po vago e cè ancora (e non migliora con ulteriori sviluppi tecnologici) una spiegazione in anteprima.
Il termine motore è usato per più cose e non si può dire in modo univoco quale sia quella giusta. Nel 2004, quando ho avuto contatti per la prima volta con la scrittura di motori di gioco, anche questo era vago. Avevi un motore di gioco nel significato di una sorta di codice che caricava dati predefiniti e ti permetteva di giocare. Poiché carica dati predefiniti, sono stati chiamati motori basati sui dati. Li compili una volta ei dati esterni avrebbero potuto essere giochi diversi senza ricompilarli. Ad un certo punto del tempo questo era lo stesso di un runtime.
Leditor è chiaro. Ti consente di definire i dati predefiniti caricati dal motore / runtime.
Un motore con un editor era chiamato SDK (es. Hammer SDK).
Poi cerano / sono motori dedicati. Un motore di phyisc, un motore di rendering, un motore sonoro, un motore di gestione degli oggetti di gioco, un motore di rete, ….
A mio parere personale quelli non sono motori (specialmente un motore di rendering NON È un motore di gioco poiché lo fa solo rendering). Quando utilizzo il motore di gioco di Google, i risultati contengono il 90% di motori di rendering puri che non sono motori di gioco. Le chiamerei tutte librerie ma poiché possono caricare dati predefiniti corrisponderebbero al termine motore basato sui dati.
Unultima 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 largomento “come sviluppare il nucleo di un motore di gioco”. Significa la parte di codice che indizi insieme tutti gli altri motori, fa la gestione degli oggetti di gioco, il loop di gioco, ecc …
Ho pubblicato la mia tesi di master come un (breve) libro. Lunico commento su Amazon da parte di un acquirente / lettore è (dopo alcuni anni): non si tratta di un motore di gioco. Dato che 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) immagino di aver scritto un motore di gioco.
Editor
Facile: consente di definire i dati nel formato richiesto dalle altre parti e quindi elimina la necessità di scrivere quei file manualmente o utilizza strumenti esterni per crearli.
Questo è ciò che fa leditor Unity 3D.
Runtime
Questo termine è spesso utilizzato 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, ti mostro il gioco e ti lascia giocare. Non crea alcun dato (tranne forse il salvataggio dei giochi) nel senso che non puoi modificare il gioco stesso con esso.
Unity Web Player è / era un runtime che ti permetteva di giocare ai giochi Unity allinterno di un browser web.
È possibile caricare ed eseguire più giochi diversi con lo stesso runtime.
Nel caso dellAPI di scripting 3D di Unity cè un taglio tra le funzionalità che funzioneranno nel gioco e le funzionalità funzionerà solo allinterno delleditor.
SDK
Questo termine è spesso chiamato anche framework .
Allepoca un SDK era un insieme di strumenti come un editor, IDE (ambiente di sviluppo integrato) per programmatori, esportatori di formati di dati e il motore / runtime.
Quindi un SDK / framework fornisce un flusso di lavoro e utilità predefiniti e mostra un modo (ben progettato) come puoi (facilmente) creare un gioco.
Fondamentalmente il motore Unity 3D sarebbe sbagliato poiché si adatterebbe maggiormente alla direzione dellSDK. Ma poiché Unity è ancora di più, è necessaria una nuova parola / definizione che corrisponda a ciò che è.
Ad ogni modo, per introdurre laltro termine, un SDK / framework fornisce una pipeline di sviluppo del gioco predefinita (non solo una risorsa pipeline ma forse, come Unity, una pipeline per risorse, logica, build, distribuzioni, ….)
Motore
sarcasmo su Usato per tutto poiché tutti vogliono essere cool scrivendo non solo una libreria, un framework o un gioco, ma meglio scrivere un motore completo. sarcasm off
Attiviamolo:
Un motore
- è un pezzo di codice / software
- è pensato per essere riutilizzato in più progetti (puoi anche scrivere un motore di gioco per un solo gioco)
- per essere riutilizzato il motore di gioco separa la parte riutilizzabile dalla parte specifica del gioco
- per essere riutilizzabile (a seconda di come è destinato a essere riutilizzato) ci sono diversi gusti come un motore basato sui dati che carica dati esterni
Un motore può essere composto da più motori (dato che oggigiorno tutto si chiama motore). Un motore di gioco può includere
- un motore di rendering che esegue il rendering (ANCORA: dio, dannazione, inferno: il codice che fa solo rendering NON È un motore di gioco)
- un motore fisico fare la fisica (è “un motore fisico, non un motore di gioco)
- un motore di intelligenza artificiale che gestisce le cose di intelligenza artificiale (è un motore di intelligenza artificiale e non un motore di gioco)
- a 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 di unapplicazione 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 subengine (rendering audio) è un modulo aggiunto al motore di gioco come plug-in. Ogni componente può far parte di un subengine / modulo. E la gestione degli oggetti di gioco (basata sui componenti) è il collegamento tra i moduli separati.
La definizione più vicina per Game Engine
Un motore di gioco fa parte del codice sorgente del tuo gioco che fornisce tutte le funzionalità che è destinato a essere riutilizzato su più giochi e ti consente di codice ed eseguire il tuo gioco. Quindi indizi insieme tutte le altre parti del codice (rendering, audio, fisica, gestione degli oggetti di gioco, networking) che sono librerie, framework o motori dedicati (rendering, fisica, …).
Il motore di gioco è il casino nel mezzo.
Risposta
Come ha già affermato @Josh, non esiste una definizione rigida di framework o motore ma, in senso concettuale, entrambi sono strumenti molto diversi.
Un framework contiene unabastrazione API di base con cui lavorare, fornendo allutente strumenti di livello superiore per interagire con la piattaforma o la funzionalità senza (in generale) preoccuparsi delle prestazioni, della compatibilità, ecc. Negli esempi che hai fornito, SDL è un framework, fornisce ti astanzi dalla piattaforma e puoi costruire il tuo software dietro quel livello senza preoccuparti della gestione delle finestre, cose specifiche del sistema operativo, ecc. Se vuoi costruire un intero software, avrai bisogno di diversi framework, ad esempio SDL per gestire i media e le 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à con tutto il necessario per gestire la fisica e fornirà unAPI facile da usare, quindi, se vuoi creare 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, snippet e codice generale che fornisce tutto il necessario per completare il progetto senza bisogno di altre terze parti né preoccuparsi di cose di livello inferiore.