Komponentų žaidimo variklio konstrukcija

Pažvelgiau į žaidimo variklio dizainą (specialiai orientuotą į 2d žaidimų variklius, bet taip pat su 3D žaidimais) ir domisi informacija apie tai, kaip tai padaryti. Girdėjau, kad daugelis variklių šiuo metu pereina prie sudėtinio dizaino, o ne tradicinių gilių objektų hierarchijos.

Ar žinote kokių nors gerų ryšių su informacija apie tai, kaip šie projektai dažnai įgyvendinami? Mačiau savo hierarchijos raidą , bet aš negaliu rasti daugiau informacijos su išsamia informacija (dauguma jų tiesiog sako: „Naudokite komponentus, o ne hierarchijas“, bet sužinojau, kad mano pastangos perjungti iš dviejų modelių) .

Bet kokie geri ryšiai ar informacija apie tai būtų vertinami ir net knygos, nors čia būtų pageidautina nuorodos ir išsamūs atsakymai.

325
14 дек. nustatė a_m0d 14 dec. 2009-12-14 17:33 '09, 17:33, 2009-12-14 17:33
@ 8 atsakymai

Atnaujinta 2013-01-07 . Jei norite pamatyti gerą komponentų pagrindu veikiančio žaidimo derinį su (mano nuomone) puikiu požiūriu į reaktyvų programavimą, žiūrėkite „ V-Play“ variklį . Jis puikiai integruoja QT QML nuosavybės įpareigojimo funkcionalumą .

Mes atlikome kai kuriuos CBSE tyrimus dėl žaidimų mūsų universitete ir per kelerius metus surinkiau keletą medžiagų:

CBSE žaidimų literatūroje:

  • Žaidimo variklio architektūra
  • Žaidimo programavimo brangakmeniai 4: „Managin“ žaidimų sistema.
  • „Gems 5 Game“ programavimas
  • 5 žaidimų programinė įranga: bendrų komponentų biblioteka
  • Žaidimo programinė įranga Gems 6: Sistemos žaidimų objektai
  • Objektinių žaidimų kūrimas
  • „Architektur des Kerns“ žaidimo variklis „e-Engine“ ir „Java“ (vokiečių kalba)

Labai geras ir švarus C # žaidimo variklio pavyzdys yra „Elephant“ žaidimų infrastruktūra .

Jei tikrai norite sužinoti, kokie komponentai yra skaitomi: Komponento programinės įrangos kūrimas! Jie apibrėžia komponentą kaip:

Programinės įrangos komponentas yra programinės įrangos elementas, atitinkantis komponento modelį ir gali būti nepriklausomai įdiegtas ir sudarytas be pakeitimų pagal kompozicijos standartą.

Komponentų modelis apibrėžia specifinius sąveikos ir išdėstymo standartus. Komponentų modelio įgyvendinimas - tai tam tikras vykdytinų programinės įrangos elementų rinkinys, reikalingas komponentams, atitinkantiems modelį, vykdyti.

Programinės įrangos komponentų infrastruktūra yra sąveikaujančių programinės įrangos komponentų rinkinys, skirtas užtikrinti, kad programinė įranga ar posistemis, pagamintas naudojant šiuos komponentus ir sąsajas, atitiktų aiškiai apibrėžtas veikimo charakteristikas.

Po 2 metų patirties, susijusios su CBSE žaidimuose, mano nuomone , objekto programavimas buvo tik aklavietė. Prisiminkite mano įspėjimą, kai žiūrite, kaip jūsų komponentai gauna mažesnius ir mažesnius, o panašios funkcijos įdėtos į komponentus, kuriuose yra daug nenaudingų pridėtinių. Naudokite funkciją reaguojantį programavimą . Taip pat pažvelkite į mano naująjį dienoraščio įrašą (kuris vedė mane į šią problemą rašydamas :)) o Kodėl perjungiau FRP architektūros žaidimo komponentinį variklį .

CBSE žaidimuose:

CBSE žaidimų žiniatinklio nuorodose (surūšiuota pagal aktualumą):

316
16 авг. Gerold Meisinger atsakymas rugpjūčio 16 d. 2010-08-16 20:30 '10, 20:30, 2010-08-16 20:30

Atrodo, kad šiuo klausimu informacijos nėra. Neseniai įgyvendinau šią sistemą, ir radau tikrai gerą „GDC Powerpoint“, kuris paaiškino detales, kurios dažnai liko gana geros. Šis dokumentas yra čia: Žaidimų objektų architektūros teorija ir praktika

Be to, „Powerpoint“ yra keletas gerų išteklių ir įvairių dienoraščių . „PurplePwny“ turi geras diskusijas ir nuorodas į kitus išteklius. Ugly Baby Studios truputį aptaria komponentų sąveikos idėją. Sėkmės!

9
14 дек. Atsakymą pateikė Noah Callaway 14 d. 2009-12-14 23:15 '09 23:15 PM 2009-12-14 23:15

Nors ne pilnas pamoka apie žaidimo variklio kūrimą, sužinojau, kad šiame puslapyje yra keletas gerų detalių ir pavyzdžių, kaip naudoti žaidimų komponentų architektūrą.

7
13 июля '10 в 2:56 2010-07-13 02:56 atsakymas pateikiamas a_m0d liepos 13 d., 10:56, 2010-07-13 02:56

Jis yra atviro kodo ir prieinamas http://codeplex.com/elephant

Kai kurie iš jų pateikė gerą gpg6 kodo pavyzdį, jį galite rasti čia: http://www.unseen-academy.de/componentSystem.html

arba čia: http://www.mcshaffry.com/GameCode/thread.php?threadid=732

svarsto

5
02 апр. atsakymas pateikiamas RubyDeveloper 02 Bal. 2010-04-02 16:25 '10, 16:25 PM 2010-04-02 16:25

Aš studijavau ir įgyvendinau šį paskutinį semestrą žaidimų kūrimo kurso metu. Tikimės, kad šis pavyzdinis kodas gali nukreipti jus teisinga kryptimi, kaip tai padaryti.

 class Entity { public: Entity(const unsigned int id, const std::string enttype); ~Entity(); //Component Interface const Component* GetComponent(const std::string family) const; void SetComponent(Component* newComp); void RemoveComponent(const std::string family); void ClearComponents(); //Property Interface bool HasProperty(const std::string propName) const; template<class T> T GetPropertyDataPtr(const std::string propName); template<class T> const T GetPropertyDataPtr(const std::string propName) const; //Entity Interface const unsigned int GetID() const; void Update(float dt); private: void RemoveProperty(const std::string propName); void ClearProperties(); template<class T> void AddProperty(const std::string propName); template<class T> Property<T>* GetProperty(const std::string propName); template<class T> const Property<T>* GetProperty(const std::string propName) const; unsigned int m_Id; std::map<const string, IProperty*> m_Properties; std::map<const string, Component*> m_Components; }; 

Komponentai apibrėžia elgesį ir darbą su savybėmis. Savybės paskirstomos visoms sudedamosioms dalims pagal nuorodą ir gauna nemokamus naujinimus. Tai nereiškia, kad pranešimai negali būti prijungti. Jei turite kokių nors klausimų, pabandysiu atsakyti kuo geriau.

4
06 сент. atsakymas duotas Macuzza 06 sept. 2010-09-06 01:59 '10 ne 1:59 2010-09-06 01:59

Šiuo metu studijuoju šią tikslią temą daugelyje (daugelyje) „GameDev.net“ temų ir nustatiau šiuos du sprendimus, kurie būtų geri kandidatai tai, ką aš rengsiu savo žaidimui:

4
17 июля '10 в 15:39 2010-07-17 15:39 atsakymą pek pateikė liepos 17 d. 10 val. 15:39 2010-07-17 15:39

Šiame kontekste komponentai man skamba kaip atskiros runtime aplinkos dalys, kurios gali veikti kartu su kitais komponentais. Jei tai yra motyvacija, galite žiūrėti

1
14 дек. Atsakymą pateikė Hassan Syed 14 d. 2009-12-14 17:41 '09 17:41 2009-12-14 17:41

Įdomus artefaktas ...

Turėjau greitą „Google“ medžioklę ir nieko neradau, bet galite peržiūrėti kai kuriuos komentarus - daugelis žmonių, atrodo, nuėjo į paprastą komponentų demonstravimą, galbūt norėsite pažvelgti į kai kuriuos iš jų įkvėpimui:

http://www.unseen-academy.de/componentSystem.html
http://www.mcshaffry.com/GameCode/thread.php?threadid=732
http://www.codeplex.com/Wikipage?ProjectName=elephant

Be to, pačiose pastabose yra gana išsami diskusija apie tai, kaip galite koduoti tokią sistemą.

1
14 дек. Justino atsakymas 14 d. 2009-12-14 17:53 '09, 17:53, 2009-12-14 17:53