Chcę zacząć pisać silnik gry od zera w celu uczenia się, jakie są warunki wstępne i jak to zrobić, jakie języki programowania i rzeczy, które mi polecasz? Również, jeśli masz dobre artykuły i książki na ten temat, będzie świetnie. Z góry dziękuję!
Moje języki programowania i narzędzia to:
- C / C ++ czy dobrze jest używać tylko C?
- Pyton
- OpenGL
- Git
- GDB
Czego chcę się z tego nauczyć:
- Podstawowy silnik gry
- Renderowanie / grafika
- Gra / Zasady
- Wejście (klawiatura / mysz / kontrolery itp.)
W renderowaniu / grafice:
- 3D
- Zacienienie
- Oświetlenie
- Teksturowanie
Odpowiedzi:
Możesz napisać silnik gry praktycznie w dowolnym języku, używając praktycznie dowolnych metod renderowania. Możesz napisać silnik gry w bash, używając na przykład danych wyjściowych konsoli.
Myślę więc, że najlepiej byłoby określić, czego dokładnie chcesz się nauczyć, pisząc własny silnik. W tworzeniu gier istnieje wiele „pól”.
Podstawowy silnik gry
Renderowanie / grafika
AI
Networking
Gra / Zasady
Dźwięk
Wejście (klawiatura / mysz / kontrolery itp.)
itp .. Stamtąd możesz nawet mieć podtematy. W renderowaniu / grafice
2d czy 3d?
Modelowanie
Zacienienie
Oświetlenie
Teksturowanie
GUI / Huds / Interfejsy.
itd itd
Tylko jeden z tych podtematów może zająć wiele godzin (lub lat!) Nauki!
Najpierw zdefiniuj, czego chcesz się nauczyć. Zacznij prosto.
Używaj dowolnego języka, w którym czujesz się komfortowo - choć niektóre lepiej nadają się do niektórych zadań. Na przykład silnik główny i rendering najlepiej wykonać najlepiej przy użyciu języka „niższego” poziomu, takiego jak C / C ++ (jeśli potrzebujesz takiej wydajności); ale coś takiego jak AI lub zasady gry można lepiej wykonać w języku wyższego poziomu. Nic nie mówi, że nie można mieszać i łączyć. Możesz napisać silnik w C ++, renderować w C (ponieważ działa dobrze z OpenGL), a następnie użyć LUA do skryptu reguł gry itp.
Na przykład istnieje silnik gry o nazwie Slick2D. Jest napisany w Javie i jest open source. Jest to przykład prostego silnika 2D napisanego i zaprojektowanego naprawdę dobrze. Możesz nauczyć się podstawowych pojęć, takich jak pętle gier, zarządzanie stanami gier itp.
Jeśli nie masz nic przeciwko C / C ++; Proponuję rzucić okiem na SDL / OpenGL. Obsługuje niektóre czynności porządkowe, takie jak wprowadzanie danych, dźwięk, tworzenie okien itp., I może skupiać się na innych rzeczach.
źródło
SDL + OpenGL to doskonały wybór do uruchomienia niestandardowego silnika gry.
Osobiście używam wersji C ++ w języku C, ponieważ odkryłem, że działa najlepiej dla mnie. Rozumiem przez to, że nie używam żadnych wyjątków. Są tego dwa powody: przede wszystkim wyjątki wymagają wyjątkowego bezpiecznego kodu, który nie jest łatwy do osiągnięcia w przypadku OpenGL i SDL. Co ważniejsze jednak, w ten sposób bardzo łatwo można eksponować obiekty C ++ w C ABI, co jest niezwykle pomocne, jeśli próbujesz wprowadzić język skryptowy do miksu.
Jestem w podobnej łodzi niż ty i zapisałem niektóre z moich przygód z SDL i OpenGL na blogu ( immersedcode.org ) na wypadek, gdyby ktoś był zainteresowany.
Jeśli chodzi o ogólną architekturę, mam dwie sugestie: jeśli chcesz silnik 3D, sprawdź książkę „Game Engine Architecture” Jason Lander. Jeśli wszystko, czego chcesz, to 2D, zachowaj prostotę projektu i pozwól się zainspirować XNA lub innymi projektami.
Wreszcie: nie dzwoń do OpenGL w całym miejscu. Zrób sobie przysługę i odizoluj ją w kilku miejscach, abyś mógł później przełączać się między OpenGL / OpenGL ES a nawet DirectX na pulpicie.
źródło
Nie używaj C, chyba że szczegóły implementacyjne trzymają cię przy celowniku. W przeciwnym razie skorzystaj z C ++, ponieważ jest to znacznie bardziej wydajny język i zawsze możesz zdecydować, aby nie korzystać z tych możliwości później. Osobiście nie mam nic za / przeciw Pythonowi, nigdy go nie użyłem.
Nie poleciłbym OpenGL zamiast DirectX, ponieważ DX ma nowoczesne podejście obiektowe, które jest o wiele czystsze i bardziej zrozumiałe / mniej podatne na błędy. Interfejs oferowany przez OpenGL jest bardzo słaby w porównaniu.
Ostatnią rzeczą, jaką otrzymałem, jest to, że słyszałem od wielu osób, którym ufam, że GDB jest całkowicie do bani, a debugger Visual Studio jest zdecydowanie najlepszy. To nie jest moje osobiste doświadczenie, więc weź to z odrobiną soli.
źródło
extern "C"
, a jego właściwe użycie sprawia, że pisanie interfejsu C jest dość trywialne - szczególnie w przypadku Pythona, gdzie w programie Boost istnieje konwerter, który ułatwia powiązanie z nim. A co z funkcjami języka C ++? Są świetne . Większe wykorzystanie funkcji językowych C ++ zwiększa niezawodność projektu i łatwość masowego kodowania w celu uzyskania akceptowalnego, bardzo niewielkiego kompromisu wydajności. Funkcje języka C są żałosne w porównaniu. Na przykład poprawne użycie nowoczesnego kompilatora C ++ może zagwarantować brak wycieków pamięci. Zrób to w C.