Ігрове програмування: загальні методи та схеми дизайну [закрито]


9

Я почав писати дуже простий ігровий движок, щоб я міг краще навчитися OpenGL 3.x, але оскільки мій недосвідчений досвід і мої рідкісні знання про те, як повинна бути розроблена 3D-гра, я зазвичай стикаюся з проблемами, коли я розумію, що я повинен був створити свої заняття по-різному. Інші проблеми, з якими я стикаюсь, - це як коротко відстежувати час у грі та при необхідності оновлювати рух та як сказати рендері, що його потрібно перемалювати. Також мені постійно потрібно робити функції Get і Set для передачі різних прапорів від одного об’єкта до іншого, це погана практика?

Отже, як видно із заголовка, мене цікавлять будь-які книги чи статті / підручники та джерела, які могли б мені допомогти і пояснювали деякі загальні шаблони дизайну в дизайні ігор (тобто обробники стану ігор, шрифти тощо).

До речі, я все ще використовую freeglut, чи рекомендуєте ви перейти до кращої системи вікон, перш ніж прогресувати або після того, як я краще зрозумію OpenGL?


12
Стандартна відповідь "Я пишу двигун" = Пишіть ігри, а не двигуни. Двигуни - це глибока кроляча яма, в яку слід потрапити. Які дослідження ви робили поки що? Тут ви отримаєте найкращі результати, вибравши єдину, зосереджену проблему та шукаючи минулі питання. Продовжуйте шукати нові проблеми, коли вони з’являються під час написання вашої гри, по одній. Як зауваження, усвідомлення того, що заняттям потрібен новий дизайн, є звичайним явищем, і процес виконання цього проекту називається "рефакторинг", це означає, що ви навчаєтесь, як ходите, і це добре.
Патрік Хьюз

1
Дякую за Вашу відповідь. Вибачте, якщо мені не було зрозуміло, я не дуже хочу створити повноцінний ігровий движок, але хотілося б вивчити деякі основні шаблони дизайну, які використовуються в ігровому дизайні, щоб я краще розробив свої класи. Я думаю, що повинні бути деякі загальні рішення загальних проблем. Чим глибше я заглиблююся в дизайн, тим більше проблем виникає і тим складніше знайти відповіді. Моє дослідження поки що не було дуже плідним, я знайшов приємний підручник, який заглиблюється у твори гри - codeproject.com/Articles/27219/… .
Grieverheart

1
Я бачу, якщо в заголовку "загальні методи ігрового двигуна", як правило, спрямовують дискусію на ... двигуни =) У будь-якому випадку, причиною, що вам важко отримати те, що ви шукаєте, є те, що існує стільки різні типи ігор, як існують роки в календарі майя, і кожен тип має свої потреби. Ви можете мати кращі результати, якщо шукати конкретний тип гри, дуже часто зустрічається шутер від першої особи, щоб дати пошуковим системам деяку тягу.
Патрік Хьюз

Я б шукав стиль FPS або фрі-роумінг. По суті, я хотів би створити світ, де я можу експериментувати з різними техніками графіки та анімації. У мене вже є основна камера та рух, як стрибки та прямування, та завантаження моделі, але це не зовсім добре, наприклад, я поміщаю анімаційну ходьбу всередині класу камери та використовую внутрішню змінну для підрахунку кадрів. Я в основному латаю отвори і не створюю нічого надійного. Я думаю, що це частина процесу навчання, і, можливо, я намагаюся рухатись занадто швидко.
Grieverheart

3
ігрове кодування завершено, архітектура ігрового двигуна - дві книги про кодування ігор, ви отримаєте загальний огляд конвеєра розвитку та основної технології, вони торкнуться трохи всього
dreta

Відповіді:


11

Я напишу належну відповідь, оскільки я був на вашому етапі близько 2 місяців тому.

Я почав писати дуже простий ігровий движок, щоб я міг краще навчитися OpenGL 3.x, але, оскільки мій досвід і мої розріджені знання про те, як повинна бути розроблена 3D-гра, я зазвичай стикаюся з проблемами, коли я розумію, що я повинен був створити свої заняття по-різному.

Не хвилюйся з цього приводу. За браком досвіду ви ніколи не зможете подумати про всі можливості та способи використання даного класу у вашому двигуні. Найкраще, якщо врахувати основні особливості класу, реалізувати його та реструктуризувати пізніше. Не намагайтеся передумувати речі, на цьому етапі ви витрачаєте час. Моя перша гра була повним безладом, я впевнений, що це було так для більшості людей.

Інші проблеми, з якими я стикаюсь, - це як коротко відстежувати час у грі та при необхідності оновлювати рух та як сказати рендері, що його потрібно перемалювати.

Вам потрібні знання про те, що таке цикл гри. Це гарне місце для початку. Після того, як ви почнете писати складніший код, як, наприклад, обробка фізики, ви можете розглянути петлі зі змінним часом кадру, але почати з малого. Простий цикл гри з фіксованою рамкою зараз повинен вам вистачити.

Також мені постійно потрібно робити функції Get і Set для передачі різних прапорів від одного об’єкта до іншого, це погана практика?

Це більше питання інженерії програмного забезпечення. З часом ви побачите, які дані потрібно захистити, а які - безпечні. Це, мабуть, найкраще, якщо ви просто реалізуєте функцію, а потім побачите те, що не виявляється поза нею, і можна розглядати як загальнодоступні дані.

Це все питання досвіду. Ви напишете клас камери, після чого побачите, яку функціональність ви хочете від нього, поряд з матрицями перетворення. Якщо ви хочете отримати будь-які негайні поради, я б сказав, застосуйте голі кістки, продовжте пізніше.

Статті та книги:

  • Розробка ігрового двигуна

Ці книги розповідають про архітектуру сучасних ігрових двигунів та трубопроводів. Вони дадуть вам хороший огляд основної технології. Я рекомендую першу книгу, якщо вам доведеться вибирати, вона менш "упереджена" щодо певних технологій, хоча врешті-решт, ви, ймовірно, хочете пройти обоє, оскільки вони чудові джерела знань.

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/

  • Виявлення зіткнення

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

(Я пов'язую це, тому що мені важко було знайти статті про те, як належним чином виявлено 3D-зіткнення.)

Книг більше, але до того моменту, коли ви закінчите це (особливо архітектура Game Engine), ви будете краще знати, що вам потрібно.

До речі, я все ще використовую freeglut, чи рекомендуєте ви перейти до кращої системи вікон, перш ніж прогресувати або після того, як я краще зрозумію OpenGL?

WinAPI, якщо ви відчуваєте, що у вас є час і бажання вивчити програмування Windows (якщо ви розробляєте для Windows). FreeGLUT чудово підходить для навчання, але, зрештою, вам потрібна додаткова функціональність. Хоча, якщо ви хочете пройти зовсім інший маршрут, ви можете запустити OpenGL з такими бібліотеками, як SFML або SDL. Дотримуйтесь FreeGLUT, якщо ви не впертий, як я. Я пішов прямо на WinAPI.


Ей, дрета, дякую за твою дуже приємну відповідь, я чекала на неї: P! На щастя, я вже знаю, як зробити виявлення зіткнень, оскільки я вже реалізував деякі алгоритми фізичного моделювання :).
Grieverheart

@ user1294203 дивовижно, я загубився при запуску, тому просто опублікував це на випадок
дрета

Я голосую за SFML, якщо ви не хочете занадто багато возитися з конкретним кодом платформи. Він невеликий, легкий, чистий, і ви можете легко зануритися в код, щоб зрозуміти, як він завершує WINAPI, наприклад.
edin-m
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.