Systemy obiektowe oparte na komponentach w praktyce [zamknięte]

43

Zobaczmy historię sukcesu. Jakie popularne gry (i silniki gier) zostały zbudowane przy użyciu systemu obiektowego opartego na komponentach ? Każda odpowiedź powinna zawierać:

  1. Tytuł gry (jeden na odpowiedź)
  2. Autor / firma
  3. Rok
  4. Czas programowania (opcjonalnie)
  5. Link do postmortem (opcjonalnie)
  6. Odnośniki do dokumentów / kodu źródłowego (opcjonalnie)
prawy
źródło
7
-1, prawie każda gra napisana w ostatniej dekadzie używa gdzieś systemu komponentowego, a nie systemu komponentowego gdzie indziej.
5
Mylisz się. Wiele silników nadal korzysta ze statycznych hierarchii. Interesujące jest gromadzenie i czytanie dokumentów / postmortemów / fragmentów kodu gier i silników, które naprawdę używają systemów składowych.
topright
4
Nie powiedziałem, że silniki nie używają statycznych hierarchii. Powiedziałem, że trudno będzie znaleźć silnik, który korzysta tylko z hierarchii statycznych, tak jak z trudnością znalazłby się silnik wykorzystujący tylko komponenty.
2
Mylisz się. Elementy gry (serce logiki gry), efekty wizualne, silnik gry i infrastruktura edytora są albo oparte na komponentach, albo nie.
topright
2
@topright: Niezależnie od tego, czy Joe ma rację, czy źle, rozpoczynanie komentarzy dwa razy z rzędu prostym i osobistym słowem „Jesteś w błędzie” nie jest taktowne, nie sądzisz? Założę się, że twoje komentarze nie przeoczyłyby żadnych istotnych informacji bez tych trzech małych słów, ale ich pominięcie przyczyniłoby się znacznie więcej do miłej i grzecznej rozmowy. Proszę wziąć to pod uwagę :)
Michael Klement

Odpowiedzi:

19

Dungeon Siege by Gas Powered Games

Scott Bilas opublikował wiele informacji o Dungeon Siege, które zawierały między innymi systemy oparte na komponentach.

Dungeon Siege został wydany w 2002 roku.

DrDeth
źródło
Wow, doskonały link. Jego przemówienie na temat systemów składowych naprawdę pomogło mi lepiej zrozumieć implementację systemów opartych na komponentach. Zgrabna rozmowa o tym, jak powstał świat ciągły w DS. Zastanawiam się, czy podobne techniki są nadal używane w innych dużych światowych grach. Myślę, że większość z nich używa czegoś bardziej zbliżonego do regionów lub kawałków (Minecraft, cokolwiek autorstwa Bethesdy).
CodexArcanum,
19

Resistance 1-2 (ewentualnie 3) (2006-2008) autorstwa Insomniac Games

Terrance Cohen wymienia te gry w swoim przemówieniu pt. A Dynamic Component Architecture for High Performance Gameplay z GDC Canada 2010.

Nie jestem pewien, czy dotyczyło to ostatnich gier Ratchet & Clank.

Chris Waters
źródło
Czy wiesz, czy dźwięk tej prezentacji znajduje się za zaporą GDC Vault? Same slajdy są całkiem fajne, ale mam kilka pytań, które, jak podejrzewam, znajdują się w prezentacji.
Nie wiedziałem o tej prezentacji, dziękuję bardzo!
topright
13

Unity3D domyślnie korzysta z systemu opartego na komponentach. Doskonale nadaje się do tworzenia elementów gry z pliku tekstowego i wstrzykiwania zależności.

function createEnemy() {

   // extract AI type for enemy
   // definition is a custom structure holding parameters to create the enemy
   var aitypename = definition.ai;

   // AIType can be an interface or abstract class
   // you can create a component from a string or from a type
   var ai : AIType = this.gameObject.AddComponent(aitypename);
   ai.setup(definition.ai_settings);

   // set rule for enemy when it is destroyed
   this.gameObject.AddComponent(definition.when_destoryed); 


}

Te elementy mogą wyglądać tak

class AI_Scout extends AIType
{
  // called per update-frame on the game-object with this script
  public function Update() {
    // run Scout AI here
   }
}


class Spawn_Ammo_On_Destroyed extends When_Destroyed
{
   // automatically called by the engine when the game object this script is attached to is
   // destroyed
   public function OnDestroyed() {
    // spawn ammo
    }
}
Extrakun
źródło
8
  1. Thief: The Dark Project
  2. Lupa
  3. 1996 - 1998
  4. 2 lata
  5. Sekcja zwłok
pentafob
źródło
8

Tony Hawk Pro Skater 3
Twórca programu: Neversoft
Rok: 2001
Czas: około dwóch lat
Post Mortem: Evolve Your Hierarchy (prawdopodobnie najbardziej powiązany artykuł na temat komponentów)

pek
źródło
1

Według mojej wiedzy najlepszym projektem, jaki widziałem, jest Burger Engine. jst pobierz kod i sprawdź, jak dobrze go zaimplementowano. Całość oparta jest na danych z XML i używali bardzo dobrze architektury opartej na jednostkach. warto na to spojrzeć.

http://code.google.com/p/burger-engine/source/browse/

Ayyappa
źródło
2
-1, ten kod wygląda naprawdę amatorsko, od błędnej pisowni „streszczenia” do statycznego wyliczenia typu komponentu, ogromnej liczby funkcji wirtualnych, włączenia 28 bajtów danych pozycji na każdym komponencie ... Jeśli to jest najlepsze, co masz widziałem, szukaj gdzie indziej.
przykro mi, że ci się nie podobało. Cały kod jest oparty na danych i nie znalazłem żadnej implementacji open source, która wykonałaby to zadanie z taką łatwością. Jeśli masz jakieś linki do dobrego kodu, opublikuj linki. do błędów pisowni, funkcja wirtualna - jest to dobre źródło informacji dla osób, które są nowicjuszami w architekturze opartej na komponentach. Służy on temu, by dać cenne wprowadzenie do tego, jak w praktyce działa projektowanie oparte na danych.
Ayyappa,
2
Nie wiem o kodzie, ale wskazanie błędów ortograficznych jest niepoprawnym argumentem, biorąc pod uwagę, że jest wielu programistów z krajów nieanglojęzycznych.
Rajavanya Subramaniyan