Jaki jest najlepiej zaprojektowany silnik gry typu open source, na przykład? [Zamknięte]

15

Możliwa duplikat:
Gdzie mogę znaleźć dobre (dobrze zorganizowane) przykłady kodu gry?

Zakodowałem kilka gier w C ++, a teraz tworzę własny silnik gry i edytor.

Mam wątpliwości co do projektu i chcę znaleźć świetne przykłady do naśladowania.

Co według Ciebie jest najlepiej zaprojektowane?

Musi być zorientowany obiektowo. Język programowania nie ma znaczenia, ale wolę w następującej kolejności: C ++, C #, Java lub inny podobny.

ZMIENIONO: Aby wyjaśnić więcej, nie jestem zainteresowany kodem specyficznym dla gry. Chcę silników do gier ogólnego zastosowania.

ZMIENIONO: W tym artykule wyjaśniono, co to jest silnik gry: silnik gry na wikipedii, a oto lista znanych silników do gier: lista silników gier na wikipedii

Dani
źródło
3
Czy naprawdę rozumiesz moje pytanie? Życzę silników do gier (nie tylko gier ). I poprosiłem Musi być obiektowy . W wątku, który powiedziałeś, odpowiedzi dotyczą tylko gier (Doom3, Prototyp itp.). Istnieje również graficzny zestaw narzędzi (OpenSceneGraph), ale w tym wątku nie ma nic szczególnego w „silnikach gier” ... Możesz zamknąć lub usuń moje pytanie, jeśli Ci się nie podoba, ale nie rozumiem głosowania w dół ... :( Moje pytanie nie jest takie samo
Dani,
2
Aby jeszcze bardziej wyjaśnić, nie jestem zainteresowany kodem specyficznym dla gry. Chcę silników do gier ogólnego zastosowania.
Dani,
3
Jest różnica: nie wszystkie gry działają na silniku ogólnego przeznaczenia. Doom3 ma silnik specyficzny dla FPS, Prototyp jest inny i tak dalej ... Być może mają one wspólne cechy (zarządzanie zasobami, skrypty ...), ale to nie dotyczy mojego pytania. Moje pytanie zaczyna się od frazy „Kodowałem kilka gier w C ++”. Powtarzam: potrzebuję znaleźć dobry kod źródłowy silnika gry ogólnego przeznaczenia. Nie jest źródłem gry do wyszukiwania kodu wielokrotnego użytku.
Dani,
1
Doom 3 ma „silnik specyficzny dla FPS”, ale ma także wszystkie części, których potrzebuje silnik ogólny - jak mówisz, zarządzanie zasobami i skrypty, renderowanie 3D, fizyka i tak dalej. Jest to silnik ogólny i nie tylko.
2
@Joe Wreschnig Jestem skłonny zgodzić się z @Dani na ten temat. Chociaż wszystkie gry są napędzane przez jakąś formę silnika, wzorce architektoniczne stosowane w silniku „jednorazowym” i silniku zaprojektowanym do pracy z wieloma tytułami są zupełnie inne, nawet jeśli oba mają skrypty, zarządzanie zasobami, renderowanie 3D, itp. elementy. Ponadto, patrząc na kod dla gry zbudowanej na silniku opracowanym przez to samo studio, prawdopodobnie nie jest najmądrzejszym wyborem, ponieważ nie da ci prawdziwych wskazówek, jak elastyczny i łatwy w użyciu silnik jest w środowisku innej firmy.
Ari Patrick,

Odpowiedzi:

6

Myślę, że najlepszym sposobem na zbudowanie silnika gry jest rozpoczęcie od tego, co już znasz dość dobrze i dodanie tych funkcji, które są nużące lub powtarzalne.

Na przykład dużo robię z Pythonem / pygame (która jest opakowaniem SDL) Bardzo podoba mi się system, ale przeszkadzały mi trzy rzeczy:

  • Budowanie pętli animacji jest uciążliwe i wszystkie są prawie takie same.
  • Podstawowy obiekt sprite jest bardzo ograniczony. Chciałem ulepszyć duszka z kierunkiem i prędkością, zdolnością do obsługi różnych warunków krawędzi ekranu, wielu obrazów i wielu schematów kolizji.
  • Pygame nie ma funkcji interfejsu użytkownika. Chciałem prostych etykiet, przycisków i selektora liczb, które
    mogłem łatwo dodać do swoich gier.

Relatywnie łatwe było utworzenie obiektowego opakowania wokół tych funkcji. Spójrz na rozdział 10 i dokumentację Game Engine dostępną tutaj: http://aharrisbooks.net/pythonGame/

(Zostało to napisane jako część książki, ale zapraszamy do silnika gry, nawet jeśli nie chcesz książki).

Rozdział 10 wyjaśnia motywację i techniki budowy podstawowego silnika gry 2D. Możesz cieszyć się nim, gdy budujesz swój własny. Rzeczywisty język nie jest tak ważny (z wyjątkiem oczywiście, że potrzebujesz języka OOP do obsługi OOP.) Jeśli już używasz SDL z C ++, możesz zacząć od dostosowania mojego silnika do C ++ / SDL.

Two pi
źródło
8

Czcigodny projekt silnika Quake (ID tech) przetrwał próbę czasu i jest prawdopodobnie najbardziej udanym projektem silnika gry wszechczasów. Wszystko oprócz renderera zostało w dużej mierze niezmienione od późnych lat 90. i nadal jest używane w nowoczesnych grach, takich jak ETQW.

Pełny kod źródłowy dla czterech iteracji tego silnika (Quake 1 do 3 oraz Wolf ET) jest dostępny na licencji GPL. Prawdopodobnie istnieje ponad sto aktywnie rozwijanych, wspieranych przez społeczność silników gier opartych na Quake, które utrzymują je w dzisiejszych czasach. Na szczególną uwagę zasługuje XreaL ze względu na fantastyczny renderer i ioQuake3 za wierną konserwację Quake 3 zoptymalizowanego pod kątem nowoczesnego sprzętu. Ponadto, w przypadku nowszych „oficjalnych” wersji silnika, dostępna jest również logika gry (nie cały silnik).

Nawet jeśli nie skończysz używać tego silnika gry, warto go zbadać ze względu na dobrze przemyślaną architekturę separacji klient-serwer i oddzielenie logiki gry od szczegółów niskiego poziomu.

Max E.
źródło
1
Jednak nie nazwałbym dokładnie technologią obiektową sprzed Doom3 id.
Tetrad,
3
Nie, nie zorientowany obiektowo, ale jak powiedziałem, warto go przestudiować. Mam na myśli, tylko dlatego, że jest to procedura, nie oznacza, że ​​da ci raka oka, jeśli na to spojrzysz! ;)
Max E.
6

Biblioteka renderowania Ogre3D jest bardzo zbliżona do kodu silnika i ze wszystkich kont, które słyszałem, jest bardzo dobrze zaprojektowana i bardzo dobra.

http://www.ogre3d.org/

Tetrad
źródło
+1 Świetny silnik. Dzięki Tetrad! Już to wiem, ale nigdy nie użyłem ani nie widziałem jego kodu źródłowego. Czy wiesz, czy ma zintegrowaną sztuczną inteligencję (tj. Wyszukiwanie ścieżek itp.)
Dani,
3
Myślę, że to wszystko dotyczy renderowania.
Tetrad,
2
Ogre to tylko biblioteka renderowania grafiki. Mechanizm renderowania grafiki obiektowej.
Jonathan Sternberg,
0

Mówiąc o silniku gry, myślę, że myślisz o czymkolwiek, co nie jest silnikiem renderowania, silnikiem dźwięku, silnikiem fizyki, silnikiem wejściowym itp.

Być może myślisz o architekturze gry, sztucznej inteligencji lub wzorcu / systemach projektowych itp., Które są wykorzystywane do strukturyzacji oprogramowania w celu zarządzania danymi i innymi komponentami w celu stworzenia jakiejś sceny / scenerii / iluzji, tworząc w ten sposób możliwy do zarządzania zestaw reguł popraw, aby stworzyć rzeczywistą „grę wideo”.

To jest faktyczna górna warstwa gry wideo, a nawet starałem się o niej trochę dowiedzieć, jest rozległa, skomplikowana i wymaga dużej wiedzy na wszystkie inne tematy. Wyobraź sobie, że chcesz odtworzyć alternatywną rzeczywistość z niczego, śledzić każde obliczenie i obliczać każde zdarzenie, a także generować dokładne dane z nich w dowolnym momencie: dla każdego rodzaju gry istnieje pewien podzbiór silnika gry, a ja nie Sądzę, że faktycznie można stworzyć ogólny silnik, który jest matematycznie wystarczająco szybki. Nawet w grze, w której sterujesz jedną postacią, wciąż istnieje wiele rzeczy, które mogą się różnić i nadal mogą wymagać zmiany całej architektury.

Branża gier nie jest tak dobrze obsługiwana przez open-source jak inne dziedziny informatyki, tylko dlatego, że rozrywka ma różne rodzaje licencji, które obejmują licencje artystyczne: produkt do gry jest opłacany tylko przez klienta, a AFAIK, jest tylko kilka silników, które wydają się wystarczająco dobre do pracy dla Ciebie: Hord3d, NeoAxis, blendelf, Panda3D. Ale nie mogę cię zapewnić, że będą równie łatwe w użyciu, jak narzędzia takie jak Unity, Torque, C4 i inne; należy pamiętać, że silnik gry, z rendererem graficznym, wydaje mi się najtrudniejszym rodzajem oprogramowania, jakie można znaleźć w tworzeniu gier.

żart
źródło
0

Dla mnie używanie Pythona z Pygame jest dobrym rozwiązaniem. Być może Python jest nieco powolny, ale na dzisiejszych komputerach i jeśli spróbujesz zoptymalizować grę, nie ma to znaczenia. Pygame ma bardzo dobrą dokumentację na stronie oryginalnej gry. Ale najpierw weź początek samouczka, aby nauczyć się podstaw. Do optymalizacji prędkości (konwersja obrazów, ...) potrzebne będą inne przykłady, które można łatwo znaleźć.

nmin
źródło