Które funkcje należą do silnika, a które do gry?

19

W tej chwili wdrażam i testuję nowe funkcje dla mojego silnika gier 2D, bezpośrednio kodując je do silnika. Jednocześnie mam grę pokazową z obsługą skryptów, która powinna wywoływać funkcje silników. Załączam np. Naprawiony ruch kafelków do klasy Entity w silniku, zamiast skryptować to specjalnie dla gry. To zdecydowanie łamie pomysł ogólnego silnika używanego w więcej niż jednej grze.

Czy są jakieś najlepsze praktyki, aby skupić się na poprawnej implementacji we właściwych częściach (tj. Silnik vs. gra)?

Christian Ivicevic
źródło

Odpowiedzi:

25

Istnieje kilka sposobów myślenia na ten temat. Jednym z nich jest wyszczególnienie konkretnych funkcji, które powinien mieć silnik (o co tutaj pytałeś). Innym sposobem jest po prostu rozpoczęcie tworzenia gier bez martwienia się zbytnio o „silnik”, a następnie funkcje, które znajdziesz, są ponownie wykorzystywane między wieloma gry (w szczególności funkcje używane w każdej grze) należy przeprowadzić migrację ze źródła dla określonej gry do wspólnej bazy kodów o nazwie „silnik”.

Ponieważ ostatecznie chcesz, aby dana funkcja była dostępna w silniku, a nie w grze, dlatego, że jest ona dzielona między wiele gier. Zazwyczaj będą to takie polecenia, jak rysowanie poleceń, kontrolery wejściowe i kod sieci. Silnik gier 2D będzie miał wiele funkcji graficznych 2D, takich jak ładowanie obrazów, hierarchia wyświetlania z kolejnością Z, obsługa arkuszy sprite, animacji itd. Wiele gier wymaga symulacji fizyki, choć z drugiej strony wiele nie. Tymczasem więcej „pod maską” rzeczy używanych w prawie każdej grze obejmuje timery, powiadamianie o zdarzeniach, a nawet funkcje matematyczne specyficzne dla rozwoju gry (np. DistanceToTarget ()


Krótko mówiąc:

A) Silnik powinien mieć funkcje wspólne dla większości gier.

B) Dowiesz się, które funkcje są wspólne, tworząc kilka gier.

jhocking
źródło
7
+1 -just start making games without worrying too much about the "engine"
JCM
1
No just start making games without worrying too much about the "engine"to z pewnością miła propozycja.
Christian Ivicevic
3
Zgadzam się z dwoma komentarzami nade mną, ale uwaga „po prostu rób gry bez martwienia się o silnik” została wyjęta z kontekstu i bez reszty bez sensu: „a następnie funkcje, które znajdziesz, są ponownie wykorzystywane między wieloma grami (w szczególności , funkcje używane w każdej grze) należy przeprowadzić migrację ze źródła dla konkretnej gry do wspólnej bazy kodu o nazwie „silnik”. Krótko mówiąc, stwórz jak najwięcej gier, aby dowiedzieć się, co powinno być pod silnikiem, a co nie t.
2
To świetny pomysł, ponieważ powstrzymuje Cię także przed wprowadzaniem funkcji silnika, których tak naprawdę nie potrzebujesz w swoich grach.
Zachary Yates,
2
+1 za utrzymanie ducha Reguły trzech .
Joshua Drake