Jestem całkiem nowy w koncepcji systemów encji, po przeczytaniu wielu rzeczy (najbardziej przydatne, ten świetny blog i ta odpowiedź ).
Chociaż mam mały problem ze zrozumieniem, jak coś tak prostego, jak możliwość manipulowania pozycją obiektu przez nieokreśloną liczbę źródeł.
To znaczy, mam swój byt, który ma element pozycji. Mam wtedy jakieś wydarzenie w grze, które każe temu bytowi przemieścić się na określoną odległość w określonym czasie.
Te zdarzenia mogą się zdarzyć w dowolnym momencie i będą miały różne wartości dla pozycji i czasu. W rezultacie zostaną one złożone razem.
W tradycyjnym rozwiązaniu OO miałbym jakąś MoveByklasę, która zawiera odległość / czas i tablicę tych w mojej klasie obiektów gry. Każdą klatkę, iterowałbym wszystkie MoveByi zastosowałem ją do pozycji. Jeśli a MoveByosiągnął swój czas zakończenia, usuń go z tablicy.
W przypadku systemu encji jestem trochę zdezorientowany, jak powinienem replikować tego rodzaju zachowanie.
Gdyby istniał tylko jeden z nich na raz, zamiast być w stanie je połączyć, byłoby to dość proste (tak mi się wydaje) i wyglądałoby mniej więcej tak:
PositionComponent zawierający x, y
MoveByComponent zawierający x, y, time
Entityktóry ma zarówno a PositionComponenti aMoveByComponent
MoveBySystemktóry wyszukuje byt zawierający oba te składniki i dodaje wartość MoveByComponentdo PositionComponent. Po timeosiągnięciu usuwa komponent z tego elementu.
Jestem trochę zdezorientowany co do tego, jak zrobiłbym to samo z wieloma ruchami.
Moje początkowe myśli są następujące:
PositionComponent, MoveByComponenttak samo jak powyżej
MoveByCollectionComponentktóry zawiera tablicę MoveByComponents
MoveByCollectionSystemktóry szuka bytu oznaczonego „a” PositionComponenti „ MoveByCollectionComponentiterującego” MoveByComponentwewnątrz niego, stosującego / usuwającego w razie potrzeby.
Wydaje mi się, że jest to bardziej ogólny problem polegający na tym, że wiele z tego samego komponentu jest pożądany, a każdy z nich chce mieć odpowiedni system. Moje byty zawierają swoje komponenty w haszu typu komponentu -> komponent, więc ściśle mają tylko 1 komponent określonego typu na jednostkę.
Czy to właściwy sposób, aby na to patrzeć?
Czy jednostka powinna mieć zawsze tylko jeden składnik danego typu?
move x by 10 in 2 secondsa move x by -10 in 2 secondsistota stałaby idealnie nieruchomo?
MoveByfunkcjonalność była tylko prędkością? Brzmi, jakbyś był na dobrej drodze. W przypadku drugiego pytania istnieje wiele różnych implementacji systemów encji / komponentów. Ten opisany w mojej odpowiedzi, do której linkowałeś, miałby tylko jeden element danego typu.