Konstrukcja silnika gry oparta na komponentach [zamknięta]
Przyglądałem się projektowi silnika gry (skupionemu głównie na silnikach gier 2D, ale także na grach 3d) i jestem zainteresowany kilkoma informacjami na temat tego, jak to zrobić. Słyszałem, że wiele silników obecnie przechodzi na konstrukcję opartą na komponentach, a nie na tradycyjnej hierarchii głębokich obiektów.
Czy znasz jakieś dobre linki z informacjami o tym, jak tego typu projekty są często realizowane? Widziałem ewoluować swoją hierarchię , ale naprawdę nie mogę znajdź wiele więcej szczegółowych informacji (większość z nich po prostu wydaje się mówić "używaj komponentów, a nie hierarchii", ale odkryłem, że potrzeba trochę wysiłku, aby przełączyć moje myślenie między dwoma modelami).
Wszelkie dobre linki lub informacje na ten temat byłyby mile widziane, a nawet książki, chociaż linki i szczegółowe odpowiedzi tutaj byłyby preferowane.
8 answers
Aktualizacja 2013-01-07: jeśli chcesz zobaczyć dobre połączenie silnika gry opartego na komponentach z (moim zdaniem) doskonałym podejściem do programowania reaktywnego, spójrz na silnik V-Play. Bardzo dobrze integruje funkcje QTS QML property binding.
Przeprowadziliśmy kilka badań na temat CBSE w grach na naszej uczelni i zebrałem trochę materiału na przestrzeni lat: {]}
CBSE w literaturze gier:
- Silnik Gry Architektura
- Game Programming Gems 4: A System for Managin Game Entities Game
- Perełki Programowania Gier 5: Zarządzanie Obiektami W Oparciu O Komponenty [[15]}Perełki Programowania Gier 5: Biblioteka Komponentów Generycznych
- Game Programming Gems 6: Game Object Component System
- Tworzenie Gier Zorientowanych Obiektowo
- Architektur des Kerns einer Game-Engine und Implementierung mit Java (Niemiecki)
Bardzo dobry i czysty przykład komponentu game-engine w C# to Framework do gry Elephant .
Jeśli naprawdę chcesz wiedzieć, jakie komponenty są czytane: Inżynieria oprogramowania oparta na komponentach! Definiują element jako:
A komponent oprogramowania jest elementem oprogramowania, który jest zgodny z modelem komponentu i może być niezależnie wdrożony i złożony bez modyfikacji zgodnie ze standardem kompozycji.
A Model składowy definiuje specyficzną interakcję i standardy składu. Implementacja modelu komponentu jest dedykowanym zestawem wykonywalnych elementów oprogramowania wymaganych do obsługi wykonywania komponentów zgodnych z modelem.
A software component infrastructure jest zbiorem współdziałających ze sobą komponentów oprogramowania zaprojektowanych w celu zapewnienia, że system lub podsystem oprogramowania zbudowany przy użyciu tych komponentów i interfejsów spełnia jasno określone specyfikacje wydajności.
Moje opinie po 2 latach doświadczenia z CBSE w grach, uznaliśmy, że programowanie obiektowe jest po prostu ślepym zaułkiem. Pamiętaj o moim ostrzeżeniu, gdy obserwujesz, jak twoje komponenty stają się coraz mniejsze, a bardziej przypominają funkcje zapakowane w komponenty z wieloma bezużytecznymi kosztami. Zamiast tego użyj programowania funkcyjno-reaktywnego . Zajrzyj też do mojego świeżego posta na blogu (który doprowadził mnie do tego pytania podczas pisania:)) o dlaczego przełączyłem się z architektury silnika gry opartej na komponentach do FRP.
CBSE w gazetach o grach:
- Tworzenie gier opartych na komponentach-rozwiązanie na eskalację kosztów i wydłużenie terminów?
-
Elastyczna I Rozszerzalna Architektura Gier Komputerowych(404) - Architektura oprogramowania dla gier
- W 2007 Roku, Po Raz Pierwszy W Historii, Pojawiła Się Nowa Wersja Gry.]}
- Inteligentna Kompozycja Obiektów Gry Z Wykorzystaniem Zależności Wstrzyknięcie
CBSE w grach-linki (posortowane według trafności):
-
Wiki obiektów opartych na komponentach(pusta wiki) - Wyewoluuj Swoje Hierachy
- struktura obiektu Gry: dziedziczenie a agregacja
- System obiektowy oparty na danych (PDF)
- System obiektowy oparty na danych (PPT)
- komponentowe narzędzie do prototypowania dla flash
-
Teoria i praktyka architektury elementów obiektowych gry(404) - Systemy jednostek są przyszłością MMO
- ogre3d.org forum: obiekty oparte na komponentach
- gamedev.net: Outboard component-based entity system architecture
- gamedev.net: Entity system question
- Brainfold entity-system blog (WebArchive)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:07
Wydaje się, że brakuje informacji na ten temat. Niedawno wdrożyłem ten system i znalazłem naprawdę dobry GDC Powerpoint, który wyjaśniał szczegóły, które często są pozostawiane dość dobrze. Ten dokument jest tutaj: Teoria i praktyka architektury obiektu gry
Oprócz tego Powerpoint, są kilka dobrych zasobów i różne blogi . PurplePwny ma dobrą dyskusję i linki do innych zasobów. Ugly Baby Studio ma trochę dyskusji wokół idei, jak komponenty współdziałają ze sobą. Powodzenia!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-01 15:01:21
Chociaż nie jest to kompletny samouczek na temat projektowania silnika gry, odkryłem, że ta strona zawiera kilka dobrych szczegółów i przykładów wykorzystania architektury komponentów do gier.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-12 23:56:50
Jest open-source i dostępny pod adresem http://codeplex.com/elephant
Ktoś stworzył działający przykład kodu gpg6, można go znaleźć tutaj: http://www.unseen-academy.de/componentSystem.html
Lub tutaj: http://www.mcshaffry.com/GameCode/thread.php?threadid=732
Pozdrawiam
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-12 23:58:50
Aktualnie badam ten dokładny temat w wielu (wielu) wątkach na GameDev.net i znalazłem następujące dwa rozwiązania jako dobrych kandydatów na to, co będę rozwijać dla mojej gry:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-17 12:39:09
Zbadałem i wdrożyłem ten ostatni semestr na Kurs tworzenia gier. Mam nadzieję, że ten przykładowy kod może wskazać ci właściwy kierunek, w jaki możesz podejść do tego.
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;
};
Komponenty określają zachowanie i operują na właściwościach. Właściwości są współdzielone między wszystkimi komponentami przez odniesienie i uzyskaj aktualizacje za darmo. Oznacza to brak dużych kosztów na przesyłanie wiadomości. Jeśli będą jakieś pytania, postaram się odpowiedzieć najlepiej jak potrafię.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-05 23:08:05
W tym kontekście komponenty dla mnie brzmią jak izolowane części uruchomieniowe silnika, które mogą działać jednocześnie z innymi komponentami. Jeśli to jest motywacja, to warto przyjrzeć się modelowi aktora i systemom, które z niego korzystają.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-14 14:41:17
Ciekawy artcle...
Szybko polowałem na google i nic nie znalazłem, ale może chcesz sprawdzić niektóre komentarze - Wiele osób zdaje się mieć okazję zaimplementować proste demo komponentu, możesz rzucić okiem na niektóre z nich w poszukiwaniu inspiracji:
Http://www.unseen-academy.de/componentSystem.html
http://www.mcshaffry.com/GameCode/thread.php?threadid=732
http://www.codeplex.com/Wikipage?ProjectName=elephant
Również same komentarze wydają się mieć dość dogłębną dyskusję na temat tego, jak można zakodować taki system.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-14 14:53:32