Vad är skillnaden mellan ett spelram (till exempel XNA med C #, SDL för c ++) och en spelmotor?
Använder spelramar motorer? Inkapslar en spelmotor undermotorer som fysikmotorer, partikelmotorer etc? Ska de användas tillsammans, eller är de uteslutande ömsesidigt?
Jag antar att det finns separata motorer för både 2D och 3D?
Kommentarer
Svar
Det finns verkligen inga strikta definitioner för ”motor” eller ”framework”.
Generellt sett anses en motor ”göra mer” eller har fler verktyg och relaterat stöd än en ram, som i sig själv ofta bara är en lös samling av relaterad funktionalitet som exponeras genom något enhetligt API.
För detta ändamål kan saker som påstår sig vara motorer använda saker som hävdar att de är ramar för att uppnå funktionalitet, men det behöver inte alltid vara fallet. På liknande sätt kan en sak som påstår sig vara en spelmotor hävda att det är de ingående delarna (fysik och rendering, etc.) implementeras med en fysikmotor eller fysikram. De typer av teknik som båda termerna hänvisar till kan användas omväxlande eller inte.
Det kan finnas ”motorer” eller ”ramar” för nästan vad som helst – fysik, ljud och ja, till och med 2D- eller 3D-grafik.
Det är egentligen bara en terminologi problem, och det spelar i allmänhet ingen roll. Ur ett funktionalitetsperspektiv, ett perspektiv fokuserat på att göra ditt spel, det som bör betyda är om tekniken i fråga levererar det du behöver för att göra ditt spel. Oavsett om det kallar sig en motor eller ett ramverk har det ingen betydelse för det.
Svar
Enkel definition som jag använder : du kan bygga en motor på ett ramverk men du skulle aldrig bygga ett ramverk på en motor. Det ena är skelettet som bestämmer arkitektur och programflöde, det andra är muskler som gör jobbet.
För en betong till exempel är Artemis ett snyggt litet ramverk för att bygga komponentsystem men du skulle aldrig kalla det en motor. Du kan bygga Artemis-system och standardkomponenter för att skapa en motor från det.
Kommentarer
- I mitt företag designade någon en ram över motorn. detta ramverk fungerar som en samling av saknade delar som motorn inte ’ ger, förenar saker som annars är lite oroliga i vår (gamla) motor. Och ger hjälpare att underlätta utvecklingen.
Svar
En ram är en samling (vanligtvis) lägre nivåbibliotek och hjälpsaker som du kan använda för att göra vad du vill (grafik, ljud etc.). Det finns inget spelrelaterat med ett ramverk förutom att de vanligtvis är optimerade eller utformade för att göra saker som är vanliga i spel.
Exempel: en motor låter dig ha en lista med enheter, var och en med en position på kartan. Ett ramverk låter dig återge ett 3d-objekt vid en viss position.
Så du ansluter dem genom att ge var och en av dina enheter ett 3d-objekt och göra dem vid behov.
Och ta-da, du har ett spel.
Svar
För en riktigt detaljerad förklaring rekommenderar jag att du läser den och endast bibel Game Engine Architecture av Jason Gregory. Jag antar att det är det mest kompletta arbetet om detta ämne sedan det publicerades. Det hanterar inte bara C ++ -delen utan också och viktigt för varje spelmotorprogrammerare teorin / arkitekturen bakom. Det är en bra utgångspunkt oberoende av språket. För att få en översikt vad vi pratar om är den här bilden från boken
Låt mig prova att svara på frågan.
Vad du än skriver kommer det att vara kod 🙂 efter många års erfarenhet, skriv vad du behöver och hur du behöver det eller använd det som ger dig vad du behöver.
Termerna motor och ramverk kommer från programvaruarkitektur tillsammans med andra termer. Så låt oss börja med de grundläggande termerna och låta oss gå uppåt.
Bibliotek
Typiska exempel: ett mattebibliotek med alla grundläggande typer och funktioner för matematiska beräkningar (Vector, Matrix, …) eller bildbibliotek (jpeg eller png) som ger funktionalitet för att skriva jpeg- eller png-bilder
I Unity 3D Matematik är en matematisk bibliotek.
Teori: en bibliotek har dedikerade funktioner kring ett ämne (t.ex. matematik ) OCH anropas av programmeraren på begäran .
Någon förhandsgranskning: det kan finnas bibliotek med ramar som också är ett rambibliotek.
Framework
Teori: En ram introducerar en inversion av kontroll . Det betyder att utvecklaren oftast inte ringer fram rammetoderna utan ram kallar utvecklarens kod. Undantag är när du måste integrera rambiblioteket i din kod och måste starta ramverket. Ett rambibliotek innehåller alla metoder och funktioner och gränssnitt för ett ramverk med dedikerad användning. Så ramar kan finnas i ett bibliotek.
Typiskt exempel: Unity 3D MonoBehaviour tillhandahåller metoder som Awake, Start, OnUpdate. Utvecklaren implementerar dessa metoder och sedan dessa metoder kallas av ramverket (game object management) (detta är inversionen av kontroll) . Detsamma med metoderna OnCollisionEnter, OnCollisionExit. De är i samma Monobehaviour men jag slår vad om att de kallas av fysikramen.
En förhandsgranskning: Motor, Runtime, Editor, SDK
Eftersom begreppet motor alltid var lite vagt och fortfarande är (och det blir inte bättre med ytterligare teknisk utveckling), finns det en förhandsgranskning av förhandsgranskningen.
Termen motor används för flera saker och det kan inte sägas unikt vilken som är rätt. Tillbaka 2004 när jag först hade kontakt med att skriva spelmotorer var det också vagt. Du hade en spelmotor i betydelsen av någon typ av kod som laddade fördefinierade data och låter dig spela spelet. Eftersom den laddar fördefinierade data kallades de datadrivna motorer. Du kompilerar dem en gång och de externa uppgifterna kunde ha varit olika spel utan att kompilera det igen. Vid någon tidpunkt var det samma som en körtid.
Redaktören är tydlig. Det låter dig definiera de fördefinierade data som laddas av motorn / körtiden.
En motor med en redigerare hette SDK (t.ex. Hammer SDK).
Sedan fanns / finns dedikerade motorer. En phyiscs-motor, rendering-motor, ljudmotor, gameobject-hanteringsmotor, nätverksmotor, ….
Enligt min personliga mening är det inte motorer (särskilt en render-motor är INTE en spelmotor eftersom den bara tolkning). När jag googlar spelmotorerna innehåller resultaten 90% rena renderingsmotorer som inte är spelmotorer. Jag skulle kalla dem alla bibliotek men eftersom de kan ladda fördefinierade data skulle de matcha termen datadriven motor.
En sista korta anmärkning innan vi kommer in i detaljer: Jag tog framgångsrikt examen med en magisterexamen i datavetenskap. Min examensarbete hanterade ämnet ”hur man utvecklar kärnan i en spelmotor”. Menande den del av koden som ledtrådar ihop alla andra motorer, gör spelet objekthantering, spelslingan, etc …
Jag publicerade min masteruppsats som en (kort) bok. Den enda kommentaren från Amazon från en köpare / läsare är (efter några år): det handlar inte om en spelmotor. Eftersom jag tog examen framgångsrikt och därför har försvarat min avhandling mot 3 erfarna programmerare (två av dem tillägnad spel och interaktiva applikationer) antar jag att jag har skrivit en spelmotor.
Editor
Enkelt: låter dig definiera data i det format som andra delar kräver dem och eliminerar därför kravet på att skriva dessa filer för hand eller använd externa verktyg för att skapa dem.
Detta är vad Unity 3D-redigeraren gör.
Runtime
Denna term används ofta används lika med motor (vilket kan vara korrekt eller felaktigt).
Runtime kör den genererade data och gör vad den har att göra med data. Visa dig till exempel spelet och låt dig spela spelet. Det skapar inga data (förutom att kanske spara spel) i den meningen att du inte kan ändra själva spelet med det.
Unity Web Player är / var en körtid där du kan spela Unity-spel i en webbläsare.
Du kan ladda och köra flera olika spel med samma körtid.
I fallet med Unity 3D scripting API finns det en skärning mellan funktionalitet som fungerar i spelet och funktionalitet det fungerar bara i redigeraren.
SDK
Denna term kallas ofta kallas också ramverk .
Då har en SDK varit en bunt verktyg som en redaktör, IDE (integrerad utvecklarmiljö) för programmerare, exportörer för dataformat och runtime / engine.
Så en SDK / ram ger dig ett fördefinierat arbetsflöde och verktyg och visar dig ett (väldesignat) sätt hur du (enkelt) kan skapa ett spel.
I grund och botten skulle Unity 3D-motor vara fel eftersom den skulle passa mer i SDK-riktningen. Men eftersom Unity är ännu mer behövs ett nytt ord / definition för att matcha vad det är.
Hur som helst, för att introducera den andra termen, ger en SDK / ram dig en fördefinierad spelutvecklingspipeline (inte bara en tillgång pipeline men kanske, som Unity, en pipeline för tillgångar, logik, builds, distributioner, ….)
Engine
sarkasm vid Används för allt eftersom alla vill vara coola genom att inte bara skriva ett bibliotek, ett ramverk eller ett spel utan också bättre skriva en komplett motor. sarkasm av
Låt oss utlösa det:
En motor
- är en kod / programvara
- den är avsedd att återanvändas i flera projekt (du kan också skriva en spelmotor för endast ett spel)
- för att återanvändas spelmotorn skiljer den återanvändbara delen från den spelspecifika delen
- för att kunna återanvändas (beroende på hur det är avsedda att återanvändas) det finns olika smaker som en datadriven motor laddar externa data
En motor kan bestå av flera olika motorer (eftersom allt kallas en motor idag). En spelmotor kan inkludera
- en renderingsmotor som gör rendering (IGEN: gud, jävla, helvete: kod gör bara rendering ÄR INTE en spelmotor)
- en fysikmotor gör fysik (det är en fysikmotor, inte en spelmotor)
- en AI-motor som hanterar AI-grejerna (det är en AI-motor och inte en spelmotor)
- a nätverksmotor (t.ex. RakNet) som gör nätverkssaker (det är en nätverksmotor, inte en spelmotor)
- en ljudmotor som gör ljudmaterialet (det är en ljudmotor och inte en spelmotor)
Ett exempel för en applikation baserad på en kärnmotor som ger ett plug-in-baserat ramverk för att sammanfoga allt i en komponentbaserad spelhanteringsmodell. Varje undermotor (återgivning av ljud) är en modul som läggs till i spelmotorn som plug-in. Varje komponent kan ingå i en undermotor / modul. Och den (komponentbaserade) hanteringen av spelobjekt är anslutningslänken mellan de separerade modulerna.
Den närmaste definitionen för Game Engine
En spelmotor är delen av källkoden i ditt spel att ger alla funktioner som är avsedd att återanvändas över flera spel och låter dig kod och kör ditt spel. Därför ledtrådar tillsammans alla andra delar av koden (rendering, ljud, fysik, hantering av spelobjekt, nätverk) som är antingen bibliotek, ramverk eller dedikerade motorer (rendering, fysik, …).
Spelmotorn är röran i mitten.
Svar
Som @Josh redan sagt, finns det ingen strikt definition av ram eller motor, men i en konceptuell mening är båda mycket olika verktyg.
Ett ramverk innehåller en grundläggande API-abraktion att arbeta med, vilket ger användaren högre nivåverktyg att interagera med plattformen eller funktionaliteten utan (allmänt) oroa sig för prestanda, kompatibilitet etc. I exemplen du gav är SDL ett ramverk, det ger du avbryter funktionen över plattformen och du kan bygga din programvara bakom det lagret utan att oroa dig för fönsterhantering, OS-specifika grejer etc. Om du vill bygga en hel programvara kommer du att behöva olika ramar, fe SDL för att hantera media och plattformssaker, Box2D för att hantera fysik, etc.
En motor är annorlunda, i det här fallet skickar verktyget allt som behövs för utvecklingen, en fysikmotor ger dig med allt som behövs för att hantera fysik och kommer att leverera ett lättanvänt API, så om du vill bygga en fysiksimulering behöver du inte något annat tredjepartsbibliotek. Motorer är inte mer än en samling ramar, andra motorer, gränssnitt, kodavsnitt och allmän kod som ger allt som behövs för att slutföra projektet utan att behöva andra tredje parter eller bekymra sig om saker på lägre nivå.