Я хочу начать писать свой игровой движок с нуля для целей обучения, каковы предпосылки и как это сделать, какие языки программирования и что вы мне порекомендуете? Также, если у вас есть хорошие статьи и книги, это будет здорово. Заранее спасибо!
Мои языки программирования и инструменты:
- C / C ++ хорошо ли использовать только C?
- питон
- OpenGL
- Гит
- GDB
Что я хочу извлечь из этого:
- Основной игровой движок
- Рендеринг / Графика
- Game Play / Правила
- Ввод (клавиатура / мышь / контроллеры и т. Д.)
В рендеринге / графике:
- 3D
- затенение
- Осветительные приборы
- Текстурирование
Ответы:
Вы можете написать игровой движок практически на любом языке, используя практически любые методы рендеринга. Например, вы можете написать движок игры на bash, используя вывод консоли.
Итак, я думаю, что было бы лучше определить, что именно вы хотите узнать при написании собственного движка. В разработке игр много «полей».
Основной игровой движок
Рендеринг / Графика
искусственный интеллект
сетей
Game Play / Правила
Звук
Ввод (клавиатура / мышь / контроллеры и т. Д.)
и т.д. Оттуда вы можете даже иметь подтемы. В рендеринге / графика
2D или 3D?
моделирование
затенение
Осветительные приборы
Текстурирование
ГПИ / Huds / интерфейсы.
и т. д.
Только одна из этих подтем может съесть много часов (или лет!) Обучения!
Итак, сначала определите, что вы хотите узнать. Начните просто.
Используйте любой язык, который вам удобен - хотя некоторые лучше подходят для определенных задач. Например, ядро и рендеринг, вероятно, лучше всего выполнять с языком «более низкого» уровня, таким как C / C ++ (если вам нужна производительность); но что-то вроде ИИ или правил игры может быть лучше сделано на языке более высокого уровня. Ничто не говорит, что вы не можете смешивать и сочетать. Вы можете написать свой движок на C ++, ваш рендеринг на C (поскольку он хорошо работает с OpenGL), а затем использовать LUA для написания сценариев ваших правил игры и т. Д.
В качестве примера, есть игровой движок под названием Slick2D. Он написан на Java и имеет открытый исходный код. Это пример простого 2d движка, написанного и спроектированного очень хорошо. Из этого вы можете изучить основные понятия, такие как игровые циклы, управление игровыми состояниями и т. Д.
Если вам удобно с C / C ++; Я бы посоветовал взглянуть на SDL / OpenGL. Он обрабатывает некоторые домашние операции, такие как ввод, звук, создание окон и т. Д., И может сосредоточиться на других вещах.
источник
SDL + OpenGL - отличный выбор для запуска пользовательского игрового движка.
Я лично использую C-версию C ++, потому что я обнаружил, что она работает лучше всего для меня. Я имею в виду, что я не использую никаких исключений. Для этого есть две причины: в первую очередь исключения требуют кода безопасности исключений, чего с OpenGL и SDL добиться непросто. Однако, что еще более важно, таким образом очень легко выставлять объекты C ++ поверх C ABI, что невероятно полезно, если вы попытаетесь внести в сценарий язык сценариев.
Я нахожусь в той же лодке, что и вы, и я записал некоторые из моих приключений с SDL и OpenGL в блоге ( immersedcode.org ) на случай, если кто-то заинтересован.
Для общей архитектуры у меня есть два предложения: если вы хотите 3D-движок, посмотрите книгу «Архитектура игрового движка» Джейсона Ландера. Если все, что вам нужно, это 2D, сделайте дизайн как можно более простым и позвольте себе вдохновиться XNA или другими проектами.
И наконец: не называйте OpenGL повсюду. Сделайте себе одолжение и выделите его в пару мест, чтобы у вас была возможность переключаться между настольным OpenGL / OpenGL ES или даже DirectX на более позднем этапе, если вы хотите.
источник
Не используйте C, если детали реализации не держат вас под прицелом. В противном случае используйте C ++, потому что это значительно более мощный язык, и вы всегда можете отказаться от использования этих возможностей позже. У меня лично нет ничего за / против Python, я никогда не использовал его.
Я не рекомендовал бы OpenGL против DirectX, потому что DX имеет современный объектно-ориентированный подход, который намного чище и более понятен / менее подвержен ошибкам. Интерфейс, предлагаемый OpenGL, чрезвычайно плох по сравнению.
Последнее, что у меня есть, это то, что я слышал от многих людей, которые верят, что GDB совершенно, совершенно отстой, и отладчик Visual Studio, безусловно, лучший. Это не мой личный опыт, поэтому примите это с небольшим количеством соли.
источник
extern "C"
, и его правильное использование делает написание интерфейса на C довольно тривиальным, особенно для Python, где в Boost существует конвертер, который облегчает привязку к нему. Как насчет особенностей языка C ++? Они великолепны . Более широкое использование языковых возможностей C ++ повышает надежность проекта и упрощает массовое кодирование для более чем приемлемого очень незначительного компромисса производительности. Языковые особенности Си по сравнению с этим жалки. Например, правильное использование современного компилятора C ++ может гарантировать отсутствие утечек памяти. Сделайте это в C.