Programowanie gier: popularne metody i wzorce projektowe [zamknięte]

9

Zacząłem pisać bardzo prosty silnik gry, aby lepiej nauczyć się OpenGL 3.x, ale ponieważ mój brak doświadczenia i niewielka wiedza na temat tego, jak powinna być zaprojektowana gra 3D, zwykle mam problemy, w których zdaję sobie sprawę, że powinienem zaprojektować swoje zajęcia różnie. Inne problemy, przed którymi stoję, to to, jak w zwięzły sposób śledzić czas i aktualizować ruch w razie potrzeby oraz jak powiedzieć rendererowi, że musi przerysować. Również ciągle muszę tworzyć funkcje Get i Set do przekazywania różnych flag z jednego obiektu do drugiego, czy to zła praktyka?

Tak więc, jak mówi tytuł, jestem zainteresowany wszelkimi książkami, artykułami / samouczkami i źródłem, które mogłyby mi pomóc i wyjaśniłyby niektóre typowe wzorce projektowe w projektowaniu gier (tj. Programy obsługi stanu gry, czcionki itp.).

Btw, nadal używam freeglut, czy poleciłbyś przejść do lepszego systemu okien przed przejściem dalej, czy po lepszym zrozumieniu OpenGL?

Grieverheart
źródło
12
Standardowa odpowiedź „Piszę silnik” = Pisanie gier, a nie silników. Silniki to głęboka nora królika, w którą można wpaść. Jakie badania przeprowadziłeś do tej pory? Tutaj uzyskasz najlepsze wyniki, wybierając jeden skoncentrowany problem i wyszukując pytania z przeszłości. Kontynuuj wyszukiwanie nowych problemów pojawiających się podczas pisania gry, pojedynczo. Na marginesie, uświadomienie sobie, że klasy wymagają przeprojektowania, jest powszechne, a proces ten nazywa się „refaktoryzacją”, co oznacza, że ​​uczysz się podczas podróży i to dobrze.
Patrick Hughes
1
Dzięki za twoją odpowiedź. Przepraszam, jeśli nie byłem jasny, tak naprawdę nie chcę budować pełnoprawnego silnika gry, ale chciałbym nauczyć się kilku podstawowych wzorców projektowych używanych w projektowaniu gier, aby lepiej projektować swoje klasy. Sądzę, że powinny być wspólne rozwiązania typowych problemów. Im głębiej wchodzę w projekt, tym więcej problemów się pojawia i tym trudniej jest znaleźć odpowiedzi. Moje dotychczasowe badania nie były zbyt owocne, znalazłem fajny samouczek, który wnika głębiej w twórczość gry, codeproject.com/Articles/27219/... .
Grieverheart
1
Rozumiem, że w nagłówku umieszcza się „wspólne metody silnika gry”, co prowadzi do dyskusji na temat… silników =) W każdym razie trudno jest uzyskać to, czego szukasz, ponieważ jest ich tak wiele różne rodzaje gier, ponieważ w kalendarzu Majów są lata, a każdy z nich ma własne potrzeby. Możesz uzyskać lepsze wyniki, jeśli szukasz określonego rodzaju gry, strzelanka FPS jest bardzo popularna, aby dać wyszukiwarkom trochę przyczepności.
Patrick Hughes
To, czego szukam, to styl FPS lub swobodny roaming. Zasadniczo chciałbym stworzyć świat, w którym będę mógł eksperymentować z różnymi technikami graficznymi i animacyjnymi. Mam już podstawową kamerę i ruch, takie jak skakanie, tarcie i ładowanie modelu, ale to nie jest w porządku, np. Umieszczam animację chodzenia w klasie kamery i używam zmiennej wewnętrznej do liczenia klatek. Przeważnie łatam dziury i nie produkuję niczego solidnego. Myślę, że to część procesu uczenia się i może staram się poruszać zbyt szybko.
Grieverheart
3
kodowanie gier zakończone, architektura silnika gry to dwie książki o kodowaniu gier, otrzymasz ogólny przegląd procesu rozwoju i technologii, dotykają wszystkiego po
trochu

Odpowiedzi:

11

Napiszę właściwą odpowiedź, ponieważ byłem na twoim etapie około 2 miesięcy temu.

Zacząłem pisać bardzo prosty silnik gry, aby lepiej nauczyć się OpenGL 3.x, ale ponieważ mój brak doświadczenia i niewielka wiedza na temat tego, jak powinna być zaprojektowana gra 3D, zwykle mam problemy, w których zdaję sobie sprawę, że powinienem zaprojektować swoje zajęcia różnie.

Nie martw się o to. Przy braku doświadczenia nigdy nie będziesz w stanie pomyśleć o wszystkich możliwościach i sposobach wykorzystania danej klasy w twoim silniku. Najlepiej, jeśli weźmiesz pod uwagę główne cechy klasy, wdrożysz ją i zrestrukturyzujesz później. Nie próbuj zbytnio zastanawiać, na tym etapie będziesz tracić czas. Moja pierwsza gra była kompletnym bałaganem, jestem pewien, że tak było w przypadku większości ludzi.

Inne problemy, przed którymi stoję, to to, jak w zwięzły sposób śledzić czas i aktualizować ruch w razie potrzeby oraz jak powiedzieć rendererowi, że musi przerysować.

Potrzebujesz wiedzy na temat pętli gry. To dobre miejsce na początek. Gdy zaczniesz pisać bardziej skomplikowany kod, taki jak obsługa fizyki, możesz rozważyć pętle ze zmiennymi czasami klatek, ale zacznij od małych. Zwykła pętla do gry z ustaloną ramką powinna ci wystarczyć.

Również ciągle muszę tworzyć funkcje Get i Set do przekazywania różnych flag z jednego obiektu do drugiego, czy to zła praktyka?

To jest raczej pytanie dotyczące inżynierii oprogramowania. Z czasem zobaczysz, które dane musisz chronić, a które są bezpieczne. Prawdopodobnie najlepiej, jeśli po prostu zaimplementujesz funkcję, a następnie zobaczysz to, co nie jest ujawnione poza nią i może być traktowane jako dane publiczne.

To wszystko kwestia doświadczenia. Napisz klasę kamery, a potem zobaczysz, jakiej funkcjonalności potrzebujesz od macierzy transformacji. Jeśli chcesz natychmiastowych wskazówek, muszę powiedzieć, wdrożyć gołe kości, przedłużyć później.

Artykuły i książki:

  • Rozwój silnika gry

Te książki mówią o architekturze współczesnych silników gier i potoków. Zapewnią dobry przegląd technologii bazowej. Polecam pierwszą książkę, jeśli musisz wybrać, jest mniej „tendencyjna” w stosunku do niektórych technologii, choć ostatecznie prawdopodobnie chcesz przejść przez obie, ponieważ są one świetnym źródłem wiedzy.

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • Wykrywanie kolizji

http://www.peroxide.dk/papers/collision/collision.pdf

(Łączę to, ponieważ trudno mi było znaleźć artykuły na temat prawidłowego wykrywania kolizji 3D).

Jest więcej książek, ale zanim skończysz z tym (szczególnie architektura Game Engine), będziesz wiedział lepiej, czego chcesz.

Btw, nadal używam freeglut, czy poleciłbyś przejść do lepszego systemu okien przed przejściem dalej, czy po lepszym zrozumieniu OpenGL?

WinAPI, jeśli czujesz, że masz czas i wolę nauczyć się programowania w systemie Windows (jeśli tworzysz dla systemu Windows). FreeGLUT nadaje się do nauki, ale w końcu będziesz potrzebować większej funkcjonalności. Jednak jeśli chcesz iść zupełnie inną drogą, możesz uruchomić OpenGL z bibliotekami takimi jak SFML lub SDL. Trzymaj się FreeGLUT, chyba że jesteś uparty jak ja. Poszedłem prosto do WinAPI.

dreta
źródło
Hej dreta, wielkie dzięki za bardzo miłą odpowiedź, na którą czekałem: P! Na szczęście wiem już, jak wykonać wykrywanie kolizji, ponieważ zaimplementowałem już niektóre algorytmy symulacji fizyki :).
Grieverheart
@ user1294203 niesamowite, zgubiłem się na początku, więc opublikowałem to na wszelki wypadek
dreta
Głosuję za SFML, jeśli nie chcesz zbytnio zadzierać z kodem specyficznym dla platformy. Jest mały, łatwy, czysty i możesz łatwo zanurzyć się w kodzie, aby zrozumieć, jak otacza on na przykład WINAPI.
edin-m