Terve kaikki,
Hieman muiden mielipiteitä pelimoottorin rakenteesta.
Eli on tullu tässä vuosien varrella väkerreltyä kaiken näköisiä pieniä pelejä. Kuitenkin nytten on tullut tarve luoda oma 2D pelimoottori, joka nopeuttaisi jatkossa pelien luomista. Olen tässä pohtinut pelimoottorin rakennetta ja näyttäisi ideaa pukkaavan kohtuu hyvin.
Kuitenkin pelimoottori käsite on hieman häilyvä. Eli mitä pelimoottori tulisi sisältää ja mille tasolle ko. moottori kannattaisi viedä. Esim. onko karttaformaatti osa pelimoottoria vai tulisiko pelimoottori sisältää vain ns. matalatason toiminnot ( piirto, scene yms... ).
Mites sitten GUI komponentit. Kannattaisiko se olla osa pelimoottoria? Vai tulisiko GUI komponentit olla sitten korkeammalla tasolla. Periaatteessahan GUI ei suoraan liity itse pelimekaniikkaan taas toisaalta hyvin suuri osa ja helpottaisi jatkossa jos GUI komponentit olisi valmiina väkerretty.
Jos pelimoottorin taas vie sille tasolle, että karttaformatti ladataan objekteineen ja moottori osaa lukea ja piirtää kartan. Näin ollen GUI komponenttienkin kannattaisi käyttää pelimootorin piirto luokkaa.
Hieman sekava taisi tulla tekstistä, mutta tarkennan jos tarvetta.
Kiitos.
Pelimoottori voi sisältää tai olla sisältämättä ihan mitä tahansa, ja valinnoista riippuu vain, mitä sillä voi tehdä. Pääsääntöisesti voisi sanoa, että jos uskot tarvitsevasi tiettyä asiaa kaikissa peleissä, laita se moottoriin, ja jos voit kuvitella tekeväsi pelin, jossa ei ole tiettyä asiaa, älä laita sitä asiaa moottoriin.
Esimerkiksi loppuun asti hiotulla roolipelimoottorilla voi tehdä uusia pelejä melkeinpä vain kirjoittamalla uuden juonen ja piirtämällä grafiikat. Näillä moottoreilla ei olisi kovin mielekästä tehdä räiskintäpeliä. Sen sijaan geneerisemmällä moottorilla minkä tahansa pelin tekeminen on hankalampaa mutta vapauksia on enemmän.
Metabolix kirjoitti:
Pääsääntöisesti voisi sanoa, että jos uskot tarvitsevasi tiettyä asiaa kaikissa peleissä, laita se moottoriin, ja jos voit kuvitella tekeväsi pelin, jossa ei ole tiettyä asiaa, älä laita sitä asiaa moottoriin.
Tästä en kyllä ole samaa mieltä. Monissa peleissä esimerkiksi tarvitsee pathfindingia, mutta kaikissa ei tarvitse. Joten pitäisikö pathfinding algoritmit aina kirjottaa uudelleen, kun sitä tarvitsee (tai copy-pasteta vanhasta projektista)? Itse ainakin laitan kaikki asiat, mitkä ovat uudelleen käytettäviä eivätkä täysin yhteen peliin spesifisiä, omaan "moottoriini"/kirjastooni. Ja hyvin on toiminut :)
Myös esim korkeuskarttoja ei läheskään kaikissa peleissä tarvitse, mutta niiden teko on yleensä niin geneeristä touhua, että lienee kannattavaa läntätä tuki suoraan pelimoottoriin.
Pääsääntöisesti minusta pelimoottorissa pitäisi olla ominaisuudet kaikelle, mitä ei ole mielekästä toteuttaa alusta joka kerta ja voisi kuvitella tietyn genren tarvitsevan.
Häilyvämpää määrittelystä tulee kun miettii erilaisia työkaluja, joita pelien tekoon saattaa haluta. Esimerkiksi Unitya sanotaan pelimoottoriksi, mutta sen merkittävimmät ominaisuudet ovat ennemminkin sen tarjoamat työkalut kuten integroitu skene-editori.
Ainakin yksinkertaiset GUI-elementit löytyvät valtaosasta pelimoottoreita.
Hyvää osviittaa siitä, mitä pelimoottoreihin usein sisältyy, voit löytää esimerkiksi katsomalla Unityn sivuja tai vaikkapa erään ilmaisen vaihtoehdon, Panda3D:n, ominaisuuslistaa.
Ja sikäli tavoitteena on nimenomaan luoda peli julkaisuun asti, on monestakin syystä paljon realistisempaa valita valmis moottori. Vielä enemmän jos taidot riittävät oman tekemiseen. ;)
Tzaeru kirjoitti:
Hyvää osviittaa siitä, mitä pelimoottoreihin usein sisältyy, voit löytää esimerkiksi katsomalla Unityn sivuja tai vaikkapa erään ilmaisen vaihtoehdon, Panda3D:n, ominaisuuslistaa.
Ja sikäli tavoitteena on nimenomaan luoda peli julkaisuun asti, on monestakin syystä paljon realistisempaa valita valmis moottori. Vielä enemmän jos taidot riittävät oman tekemiseen. ;)
En nyt ihan tajua, että miksi pitäisi käyttää valmista moottoria, jos haluaa saada pelin valmiiksi? Jos kyse olisi jostain monimutkaisesta ja grafiikka-intensiivisestä 3D pelistä, niin ehkä joo, mutta aloittaja puhui 2D pelistä ja mainitsi että moottorin tarkoitus on vain nopeuttaa tulevien pelien tekemistä.
Myöskin ehkä vähän tyhmää ottaa mallia jättimäisestä Unitystä, kun itse haluaa tehdä vain pienen 2D-moottorin (missä luultavasti ei edes olisi mitään GUI-editoria tms) :) Mutta kai noita Unityn ominaisuuksiakin katsomalla saa jotain ideaa :)
Jooh, en jostain syystä kiinittänyt oikein hirveästi huomiota tuohon "Kuitenkin nytten on tullut tarve luoda oma 2D pelimoottori [..]"-kohtaan joten vastasin ehkä liian geneerisesti keskittyen lähinnä hyvin yleiskäyttöisten moottoreiden ominaisuuksiin.
En kuitenkaan näe mitään vikaa (lähinnä päinvastoin) valmiin moottorin käyttämisessä, vaikka tarkoituksena onkin tehdä 2D-peli, oli se yksinkertainen tai ei. Esimerkiksi rautakiihdytyksestä, audiotuesta, erilaisista efekteistä ja vastaavista on tasan aina hyötyä ja niiden toteuttaminen valtaosin itse on lähinnä ylimääräistä vaivaa jos pääasiallinen motiivi on saada valmis peli aikaiseksi. Toki siinä tapauksessa voi myös valita jotain kevyempää.
Tietenkin jos koodauksen ja tekniikoiden opettelu ja pelintekoon liittyvien aiheiden syvällinen tuntemus on isompi tai yhtä suuri motivaatio kuin itse peli, voi ilman muuta kokonaan itsekin moottorin väkertää.
Tzaeru kirjoitti:
En kuitenkaan näe mitään vikaa (lähinnä päinvastoin) valmiin moottorin käyttämisessä, vaikka tarkoituksena onkin tehdä 2D-peli, oli se yksinkertainen tai ei. Esimerkiksi rautakiihdytyksestä, audiotuesta, erilaisista efekteistä ja vastaavista on tasan aina hyötyä ja niiden toteuttaminen valtaosin itse on lähinnä ylimääräistä vaivaa jos pääasiallinen motiivi on saada valmis peli aikaiseksi. Toki siinä tapauksessa voi myös valita jotain kevyempää.
Aika monesta pelikirjastosta löytyy nuo mainitsemat asiasi (ja vaikka kuinka paljon muutakin :)). Riippuu tietysti mitä aloittaja käyttää. Jos käyttää jotain OpenGL:ää niin se on vähän eri asia kuin jos käyttää jotain vähän laajempaa ja korkeamman tason kirjastoa :)
Flai kirjoitti:
Aika monesta pelikirjastosta löytyy nuo mainitsemat asiasi (ja vaikka kuinka paljon muutakin :)).
Ja niistä käytännössä muotoutuu sitten pelimoottoriksikin kutsuttava härpäke kun ne on kerätty yhteen ja lisätään jonkinlainen skene/renderöintimanageri homman päälle. Haluaako sen sitten tehdä itse lienee se kysymys, jos on jo päättänyt ottaa ison läjän kirjastoa mukaan.
Tzaeru kirjoitti:
Flai kirjoitti:
Aika monesta pelikirjastosta löytyy nuo mainitsemat asiasi (ja vaikka kuinka paljon muutakin :)).
Ja niistä käytännössä muotoutuu sitten pelimoottoriksikin kutsuttava härpäke kun ne on kerätty yhteen ja lisätään jonkinlainen skene/renderöintimanageri homman päälle. Haluaako sen sitten tehdä itse lienee se kysymys, jos on jo päättänyt ottaa ison läjän kirjastoa mukaan.
Tarkoitin pääasiassa näitä yksittäisiä "suurempia" pelikirjastoja (libGDX, cocos2d, XNA jne), mistä löytyy nuo ominaisuudet. Mutta eivät nuo pelkät kirjastot minusta moottoria tee, vaikka noi perus-asiat saattavat löytyäkkin. Mutta joo, ihan sama oikeastaan. Pelimoottorin käsite on niin laaja, että turha kiistellä että mikä on ja mikä ei ole :)
Kyllä vaan pääpaino moottorin teossa on nimen omaan oppiminen idealla "miten tehdä hyvä pelimoottori". Itse vierastan valmiita moottoreita ja käyttö kokemukset ovatkin jääneet aika pitkälle API ja luokka kaavioiden selaamiseen.
Kuten Ogren luokka kaavioista oli aikanaan apua kun väänsin pienen 3D Enginen, joka pääasiassa nopeutti GLSL ja 3D objektien hallintaa. Eli yhteenvetona niistä oppii, mutta jotta haluaa oppia lisää, asiaan pitää syventyä luomalla se.
Nyt haluaisin sitten luoda oikeasti hyvän 2D moottorin johon pyrin luomaan mahdollisimman paljon valmiiksi, mutta kuitenkin rajoittaa mahdollisiman vähän.
Toki jonkin moisen moottorin saa aikaiseksi ihan vaan IDE auki ja kirjoittamaan, mutta se, että onko loppu tulos tyydyttävä ja hyvä on toinen juttu.
Itse olen pohtinut moottorin pohjautuvan Eventteihin. Eli ylempi tasoi kommunikoisi moottorin kanssa Eventtejen välityksellä. Tämän avulla uskoisin saavan kohtuu hyppysissä pysyvän moottorin ja ylemmälle tasolle kirjotettaisiin vain ohjeita miten moottorin tulisi toimia. Kuten aikasemmin jo mainitsin, moottori olisi hyvä olla mahdollisimman vähän rajoittava. Toki joitain rajoituksia tulee aina.
Tarkoituksena olisi kirjoittaa Editorit/Editori jolla voi tehdä Objekteja, Scenejä, Karttoja, Käyttöliittymiä ja Partikkeli effektejä ko. moottorille.
kayttaja-3842 kirjoitti:
...
Ei mitään sanottavaa, mutta kannattaa muistaa että jos tarkoitus on tehdä *pelejä*, niin tuollaisen "one-for-everything" moottorin tekeminen ei ehkä ole niin viisasta, varsinkin jos aiot tehdä jotain geneerisiä editoreja mitä voi käyttää "kaikissa" 2D-peleissä jne. Siinä kuitenkin kestää melko kauan ja sillä aikaa kun väännät sitä, niin voisit tehdä vaikka kuinka monta (ainakin pienempää) peliä :) Myöskin kun moottoria rakentaa ilman, että samaan aikaan tekee jotain peliä missä sitä käytetään, saattaa helposti käydä niin, että teet jotain ominaisuuksia jotka on ihan turhia, unohdat oleellisia asioita tai sitten vaan rakennat moottorin, jolla ei voi tehdä mitään järkevää :)
Minä en kyllä mikään mestari ole, joten kannattaa ottaa kaikki mitä sanon (suurin) varauksin, mutta mieti kuitenkin :)
Mikäli pelimoottori tarkoittaa samaa kuin "kehysympäristö", niin moottoriinhan pitäisi laittaa vain sellaista tavaraa, jota sinun ei missään nimessä tarvitse muokata, kun teet vaikka kahta eri peliä rinnakkain (hox: jatkokehitys on eri asia). Kaikki koodi, mitä pitää muokata jokaista peliä varten erikseen, pitäisi pitää pois pelimoottorista.
Toisaalta en ymmärrä sitä, miksei pelimoottorista voisi tehdä modulaarista kokonaisuutta, jolloin esimerkiksi tuo mainittu karttaformaatti / karttakirjasto voisi olla tavallaan kolmas erillinen komponentti? Ei siis kiinteä osa pelimoottoria mutta kuitenkin sellainen yleiskäyttöinen kirjasto, jonka voi vaihtaa toiseen, jos jokin toinen peli tarvitsee erilaisia toimintoja kartoissaan?
Aihe on jo aika vanha, joten et voi enää vastata siihen.