Odpowiedź Josha jest niesamowita, ale chciałbym dodać:
Jedną z najfajniejszych funkcji Entity / Component jest oparty na danych sposób, w jaki każda „rzecz” w grze jest tworzona i zarządzana. Z tego, co widziałem, po utworzeniu ładnej biblioteki typów komponentów i systemów możesz budować praktycznie wszystko przy minimalnych modyfikacjach kodu. (Uwaga: minimalna! = 0 )
Definiując grę pod kątem zachowania i dając sobie możliwość modyfikowania tych zachowań w locie - w czasie wykonywania, podczas inicjalizacji poprzez ładowanie ich ze skryptu lub bazy danych itp. - otwieracie cały świat nowych możliwości. Chcesz się dowiedzieć, dlaczego twoje cienie nie lądują tam, gdzie można się spodziewać? Dodaj element kamery / POV do swojego światła.
Podmiot / komponent pozwala budować, co tylko chcesz, o ile utworzyłeś bloki.
Ponadto wielokrotne dziedziczenie powoduje ten sam problem, co pojedyncze dziedziczenie. Po dodaniu atrybutu lub zachowania w hierarchii następuje jego propagacja. Tak długo, jak tworzysz głębokie hierarchie, napotykasz niepotrzebne ciężary, powielasz kod lub rozwiązujesz konflikty. Większości tego można uniknąć, wyobrażając sobie grę jako dane.
Właśnie zacząłem grać z tym w ciągu ostatnich kilku tygodni, ale jestem pod wrażeniem, jak proste stały się rzeczy. To nie jest srebrna kula - natknąłem się na kilka przypadków, w których przymocowanie lambdy do komponentu było najczystszym i najwygodniejszym sposobem rozwiązania problemu - ale jest to całkiem dobry wzór, jeśli można to tak nazwać.
Z nieco pokrewną uwagą: jeden z dużych, nudnych generatorów konserwacji w aplikacjach zorientowanych na dane (strony internetowe itp.) Mapuje obiekty hierarchiczne na relacyjne bazy danych. Mamy wiele fajnych rozwiązań, ale ostatecznie są to wszystkie hacki zaprojektowane w celu spłaszczenia hierarchii. Zamiast budować model w taki sposób, aby spełniał cel aplikacji, kończy się kompromis między efektywną hierarchią a logiczną reprezentacją relacyjną. Pomyślałem o przebudowaniu dość dużej hierarchii w jednej z moich aplikacji jako systemu encji / komponentów - porzuć hierarchię i uczyń bazę danych Złotym Standardem do końca wdrożenia - i jest obiecująca.
Po zintegrowaniu funkcji takich jak dynamiczne generowanie kodu / buforowanie kodu, które mogą rozwiązać problemy z wydajnością, uzyskuje się szybką, elastyczną, logiczną architekturę, która może po prostu zrealizować cel OOP wielokrotnego użytku w znacznie, znacznie lepszy sposób.