Mitä eroa on pelikehyksellä (esimerkiksi XNA with C #, SDL for c ++) ja pelimoottorilla?

Käytävätkö pelikehykset moottoreita? Kapseloiko pelimoottori alimoottoreita, kuten fysiikkamoottoreita, hiukkasmoottoreita jne. Pitäisikö niitä käyttää yhdessä vai ovatko ne yksinomaan keskenään?

Katson, että sekä 2D- että 3D-malleille on erilliset moottorit?

Kommentit

vastaus

”Moottorille” tai ”kehykselle” ei todellakaan ole tarkkoja määritelmiä.

Yleisesti ottaen moottorin katsotaan tekevän ”enemmän”. tai niillä on enemmän työkaluja ja niihin liittyvää tukea kuin kehyksillä, mikä itsessään on usein vain löysä kokoelma siihen liittyviä toimintoja, jotka on paljastettu jonkin yhtenäisen sovellusliittymän kautta.

Tätä tarkoitusta varten moottoriksi väitetyt asiat voivat käyttää asioita, jotka väittää olevansa kehyksiä toimivuuden saavuttamiseksi, mutta sen ei aina tarvitse olla asiaa. Vastaavasti asia, joka väittää olevansa pelimoottori, voi väittää, että sen osat (fysiikka ja renderointi jne.) toteutetaan fysiikan moottori tai fysiikan kehys. Molemmilla termeillä tarkoitettua tekniikkaa voidaan käyttää keskenään vai ei.

Siellä voi olla ”moottoreita” tai ”kehyksiä” melkein mihin tahansa – fysiikkaan, ääniin ja kyllä, jopa 2D- tai 3D-grafiikkaan.

Se on oikeastaan vain terminologia asia, ja sillä ei yleensä ole väliä paljon. Toiminnallisuuden näkökulmasta, näkökulmasta, joka keskittyy pelisi tekemiseen, on merkitystä sillä, toimittaako kyseinen tekniikka pelin tekemiseen tarvitsemasi. Sillä, kutsutaanko sitä moottoriksi vai kehykseksi, ei ole mitään merkitystä.

Vastaus

Yksinkertainen määritelmä, jota käytän : Voit rakentaa moottorin kehykselle, mutta et koskaan rakenna kehystä moottorille. Yksi on luuranko, joka määrittää arkkitehtuurin ja ohjelmavirran, toinen on lihas, joka tekee työn.

Betonille Esimerkiksi Artemis on siisti pieni kehys komponenttijärjestelmien rakentamiseen, mutta sitä ei koskaan voida kutsua moottoriksi. Voisit rakentaa Artemis Systems -järjestelmän ja vakiokomponentit, jotta voit luoda siitä moottorin.

Kommentit

  • Yrityksessäni joku suunnitteli kehyksen moottorin päälle. tämä kehys toimii kokoelmana puuttuvista osista, joita moottori ’ ei tarjoa, yhdistää asioita, jotka ovat muuten hieman siistit (vanhassa) moottorissamme. Ja tarjoaa avustajia kehittämisen helpottamiseksi.

Answer

Kehys on kokoelma (yleensä) alemman tason kirjastoja. ja auttajajuttuja, joita voit käyttää mitä tahansa helvettiä varten (grafiikka, äänet jne.). Kehyksessä ei ole mitään peliin liittyvää, paitsi että ne yleensä optimoidaan tai suunnitellaan tekemään peleissä yleisiä asioita.

Esimerkki: moottorin avulla voit luoda luettelon entiteeteistä, joista jokaisella on sijainti kartalla. Kehyksen avulla voit tehdä kolmiulotteisen objektin tietystä sijainnista.

Joten yhdistät ne antamalla jokaiselle entiteetillesi kolmiulotteisen objektin ja renderöit ne tarvittaessa.

Ja ta-da, sinulla on peli.

Vastaa

Todella yksityiskohtaisen selityksen saamiseksi suosittelen lukemaan yhden ja vain raamattu Pelin moottoriarkkitehtuuri , kirjoittanut Jason Gregory. Luulen, että se on täydellisin aihe tästä aiheesta sen julkaisemisen jälkeen. Se ei käsittele vain C ++ -osaa, vaan ja jokaiselle pelimoottoriohjelmoijalle tärkeä teoria / arkkitehtuuri. Se on hyvä lähtökohta kielestä riippumatta. Saadaksesi yleiskuvan siitä, mistä puhumme, on tämä kuva kirjasta

Anna minun yrittää vastata kysymykseen.

Mitä kirjoitatkin, se on koodi 🙂 vuosien kokemuksen jälkeen, kirjoita mitä tarvitset ja miten sitä tarvitset tai käytä mitä tarjoaa sinulle mitä tarvitset.

Termit moottori ja framework come ohjelmistoarkkitehtuurista muiden termien ohella. Joten aloitetaan peruskäsitteet ja päästään eteenpäin.


Kirjasto

Tyypillisiä esimerkkejä: matematiikkakirjasto, joka tarjoaa kaikki matemaattisten laskelmien perustyypit ja toiminnot (vektori, matriisi, …) tai kuva (jpeg tai png) -kirjasto, joka tarjoaa toiminnot jpeg- tai png-kuvien kirjoittamiseen

Unity 3D: ssä Matematiikka on matematiikkalibra.

Teoria: kirjasto tarjoaa omistettuja ominaisuuksia aiheen ympärille (esim. matematiikka ) JA kutsuu ohjelmoija tarvittaessa .

Joitakin esikatselu: voi olla kirjastoja, jotka pitävät kehyksiä eli kehyskirjastoja.


Framework

Teoria: Kehys esittelee -ohjauksen kääntämisen . Tämä tarkoittaa, että kehittäjä ei useimmiten kutsu kehysmenetelmiä, mutta kehys kutsuu kehittäjän koodia. Poikkeuksia ovat silloin, kun kehyskirjasto on integroitava koodiin ja kehys on käynnistettävä. Kehyskirjasto tarjoaa kaikki menetelmät, toiminnot ja rajapinnat kehykselle, jolla on oma käyttö. Joten kehykset voivat olla kirjastossa.

Tyypillinen esimerkki: Unity 3D MonoBehaviour tarjoaa menetelmiä, kuten Herätys, Käynnistä, OnUpdate. Kehittäjä toteuttaa nämä menetelmät ja sitten näitä menetelmiä kutsutaan (pelin objektinhallinta) -kehyksessä (tämä on ohjauksen inversio) . Sama menetelmä OnCollisionEnter, OnCollisionExit. He ovat samassa käytöksessä, mutta lyön vetoa, että fysiikkakehys kutsuu niitä.


Esikatselu: Moottori, ajonaika, toimittaja, SDK

Koska termi moottori oli aina epämääräinen ja on edelleen (ja siitä ei tule parempaa tekniikan kehityksen myötä) jonkinlainen esikatseluselvitys.

Termiä moottori käytetään useisiin asioihin, eikä voida yksiselitteisesti sanoa, mikä on oikea. Vuonna 2004, kun minulla oli ensimmäinen yhteys pelimoottoreiden kirjoittamiseen, se oli myös epämääräinen. Sinulla oli pelimoottori jonkinlaisen koodin merkityksessä, joka latasi ennalta määritettyjä tietoja ja antoi sinun pelata peliä. Koska se lataa ennalta määritettyä dataa, niitä kutsuttiin datalähtöisiksi moottoreiksi. Käännät ne kerran, ja ulkoinen data olisi voinut olla erilainen peli kääntämättä sitä uudelleen. Jossain vaiheessa tämä oli sama kuin ajonaika.

Toimittaja on selkeä. Sen avulla voit määrittää moottorin / ajonaikaisen ladatun ennalta määritellyn datan.

Editorilla varustettua moottoria kutsuttiin SDK: ksi (esim. Hammer SDK).

Sitten oli olemassa erillisiä moottoreita. Phyiscs-moottori, renderointimoottori, äänimoottori, peliobjektin hallintamoottori, verkkomoottori, ….

Minun mielestäni nämä eivät ole moottoreita (varsinkin renderöintimoottori EI OLE pelimoottori, koska se renderointi). Kun googlen pelimoottoria, tulokset sisältävät 90% puhtaita renderöintimoottoreita, jotka eivät ole pelimoottoreita. Kutsuisin niitä kaikkia kirjastoiksi, mutta koska he saattavat ladata ennalta määriteltyjä tietoja, ne sopivat termiin data-driven engine.

Viimeinen lyhyt sivuhuomautus ennen kuin pääsemme yksityiskohtiin: Valmistuin onnistuneesti maisteriksi tietokone Tiede. Diplomityössäni käsiteltiin aihetta ”kuinka kehittää pelimoottorin ydin”. Tarkoitetaan koodin sitä osaa, joka yhdistää kaikki muut moottorit, hoitaa peliobjektien hallinnan, pelisilmukan jne. …

Julkaisin diplomityöni (lyhyen) kirjan. Ainoa ostaja / lukija kommentoi Amazonia (muutaman vuoden kuluttua): kyse ei ole pelimoottorista. Koska olen valmistunut menestyksekkäästi ja siksi olen puolustanut opinnäytetyöni 3 kokenutta ohjelmoijaa vastaan (2 heistä omistettu peleille ja interaktiivisille sovelluksille), luulen, että olen kirjoittanut pelimoottorin.


Editori

Helppo: antaa sinun määrittää tiedot muissa osissa vaadittavassa muodossa ja poistaa siten vaatimuksen näiden tiedostojen kirjoittamisesta käsin tai käytä ulkoisia työkaluja niiden luomiseen.

Näin Unity 3D -editori tekee.


Suoritusaika

Tätä termiä käytetään usein yhtä hyvin moottorin kanssa (joka voi olla oikea tai virheellinen).

Ajonaika suorittaa luodut tiedot ja tekee mitä sillä on tekemistä tietojen kanssa. Esim. Näyttää pelin ja antaa sinun pelata peliä. Se ei luo tietoja (lukuun ottamatta ehkä pelien tallentamista), eli et voi itse muokata peliä.

Unity Web Player on / oli ajonaikainen, jonka avulla voit pelata Unity-pelejä verkkoselaimessa.

Voit ladata ja suorittaa useita eri pelejä samalla ajonajalla.

Unity 3D -skripti-sovellusliittymän tapauksessa on leikkaus pelissä toimivien toimintojen ja toiminnallisuuden välillä. joka toimii vain editorissa.


SDK

Tätä termiä kutsutaan usein kutsutaan myös kehykseksi .

Tuolloin SDK on ollut joukko työkaluja, kuten editori, IDE (integroitu kehittäjäympäristö) ohjelmoijille, viejät datamuodoille ja ajonaikaiselle / moottorille.

Joten SDK / framework tarjoaa sinulle ennalta määritellyn työnkulun ja apuohjelmat sekä näyttää (hyvin suunnitellun) tavan kuinka voit (helposti) luoda pelin.

Periaatteessa Unity 3D -moottori olisi väärä, koska se sopisi enemmän SDK-suuntaan. Mutta koska Unity on vielä enemmän, tarvitaan uusi sana / määritelmä vastaamaan mitä se on.

Joka tapauksessa toisen termin käyttöönottamiseksi SDK / framework tarjoaa sinulle ennalta määritellyn pelinkehitysputken (ei vain resurssia) mutta ehkä kuten Unity, putki resursseja, logiikkaa, koontiversioita, käyttöönottoja jne. varten)


Moottori

sarkasmi Käytetään kaikkeen, koska kaikki haluavat olla viileitä kirjoittamalla paitsi kirjasto, kehys tai peli, mutta kirjoittamalla paremmin koko moottori. sarkasmi pois

Anna sen laukaista:

Moottori

  1. on osa koodia / ohjelmistoa
  2. se on tarkoitettu käytettäväksi uudestaan useissa projektit (voit myös kirjoittaa pelimoottorin vain yhdelle pelille)
  3. uudelleenkäyttöä varten pelimoottori erottaa uudelleenkäytettävän osan pelikohtaisesta osasta
  4. uudelleenkäytettäväksi (riippuen siitä, miten se on tarkoitettu uudelleenkäyttöön) on olemassa erilaisia makuja, kuten dataohjattu moottori ulkoisten tietojen lataaminen

Moottori voi koostua monityyppisistä muista moottoreista (koska kaikkea kutsutaan nykyään moottoriksi). Pelimoottori voi sisältää

  • renderöintimoottorin, joka tekee renderöinnin (JÄLLEEN: jumala, hitto, helvetti: vain renderöinti, koodi EI OLE pelimoottori) fysiikan tekeminen (se on fysiikkamoottori, ei pelimoottori)
  • tekoälykone, joka käsittelee tekoälytuotteita (se on tekoälymoottori eikä pelimoottori)
  • a verkkomoottori (esim. RakNet), joka tekee verkkotietoja (se on verkkomoottori, ei pelimoottori)
  • äänimoottori, joka tekee äänitöitä (se on äänimoottori eikä pelimoottori)

Esimerkki sovelluksesta, joka perustuu ydinmoottoriin, joka tarjoaa laajennuksiin perustuvan kehyksen kaiken yhdistämiseksi komponenttipohjaiseen peliobjektin hallintamalliin. Jokainen subengine (renderöinti) on moduuli, joka lisätään pelimoottoriin liitännäisenä. Jokainen komponentti voi olla osa subengine / moduulia. Ja (komponenttipohjainen) peliobjektin hallinta on yhteyslinkki erillisten moduulien välillä.

kirjoita kuvan kuvaus tähän


Lähin määritelmä pelimoottorille

-pelimoottori on lähdekoodin osa Pelin , joka tarjoaa kaikki toiminnot , joka on tarkoitettu käytettäväksi uudestaan useiden pelien kesken ja antaa sinun koodata ja suorittaa pelisi. Siksi se vihjaa yhteen kaikki muut koodin osat (renderointi, ääni, fysiikka, peliobjektien hallinta, verkottuminen) joko kirjastot, kehykset tai erilliset moottorit (renderöinti, fysiikka, …).

Pelimoottori on keskellä oleva sotku.


Vastaa

Kuten @Josh jo totesi, kehystä tai moottoria ei ole määritelty tarkasti, mutta käsitteellisesti molemmat ovat hyvin erilaisia työkaluja.

Kehys sisältää API: n perushäiriön työskennellessä, jolloin käyttäjän korkeamman tason työkalut voivat olla vuorovaikutuksessa alustan tai toiminnallisuuden kanssa huolimatta (yleensä) suorituskyvystä, yhteensopivuudesta jne. Antamisissasi esimerkeissä SDL on kehys teet tähtitietoja alustan yli ja voit rakentaa ohjelmistosi kyseisen kerroksen taakse huolimatta ikkunoiden hallinnasta, käyttöjärjestelmäkohtaisista asioista jne. Jos haluat rakentaa kokonaisen ohjelmiston, tarvitset erilaisia kehykset, fe SDL media- ja alustatietojen hallintaan, Box2D fysiikan hallintaan jne.

Moottori on erilainen, tässä tapauksessa työkalu toimittaa kaiken kehitykseen tarvittavan, fysiikkamoottori tarjoaa sinulle kaikki tarvittavat fysiikan hallintaan ja toimittaa helppokäyttöisen sovellusliittymän, joten jos haluat rakentaa fysiikan simulaation, et tarvitse muuta kolmannen osapuolen kirjastoa. Moottorit ovat vain kokoelma kehyksiä, muita moottoreita, käyttöliittymiä, katkelmia ja yleisiä koodeja, jotka tarjoavat kaiken tarvittavan projektin loppuun saattamiseksi ilman muita kolmansien osapuolien tarvetta tai huolta alemman tason asioista.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *