Какой движок с открытым исходным кодом лучше всего подходит для примера? [закрыто]

15

Возможный дубликат:
где я могу найти хорошие (хорошо организованные) примеры игрового кода?

Я написал несколько игр на C ++, и сейчас я создаю свой собственный игровой движок и редактор.

У меня есть некоторые сомнения по поводу дизайна, и я хочу найти отличные примеры для подражания.

Какой дизайн на ваш взгляд лучше?

Должен быть объектно-ориентированным. Язык программирования не имеет значения, но я предпочитаю в таком порядке: C ++, C #, Java или другое подобное.

РЕДАКТИРОВАНИЕ: Чтобы уточнить больше, меня не интересует код для конкретной игры. Я хочу игровые движки общего назначения.

РЕДАКТИРОВАНИЕ: В этой статье объясняется, что такое игровой движок: игровой движок в Википедии, и вот список известных игровых движков: список игровых движков в Википедии

Дани
источник
3
Вы действительно понимаете мой вопрос? Желаю игровых движков (не только игр ). И я просил должен быть объектно-ориентированным . В упомянутой вами ветке ответы даны только для игр (Doom3, Prototype и т. Д.). Также имеется графический инструментарий (OpenSceneGraph), но в этой теме нет ничего конкретного о «игровых движках» ... Вы можете закрыть или удалите мой вопрос, если вам это не нравится, но я не понимаю отрицательное голосование ... :( У меня не тот вопрос
Дани
2
Чтобы прояснить еще больше, меня не интересует код, специфичный для игры. Я хочу игровые движки общего назначения.
Дани
3
Есть разница: не все игры работают на движке общего назначения. У Doom3 есть FPS-специфический движок, Prototype другой и так далее ... Может быть, у них есть что-то общее (управление ресурсами, скриптинг ...), но это не относится к моему вопросу. Мой вопрос начинается с фразы «Я написал несколько игр на C ++». Я повторяю: мне нужно найти хороший исходный код игрового движка общего назначения. Не игровой источник для поиска повторно используемого кода.
Дани
1
В Doom 3 есть «движок, специфичный для FPS», но также есть все части, в которых нуждается общий движок - как вы говорите, управление ресурсами и сценариями, 3D-рендеринг, физика и так далее. Это общий двигатель и больше , а не как-то меньше.
2
@Joe Wreschnig Я склонен согласиться с @Dani по этой теме. Несмотря на то, что все игры основаны на какой-либо форме движка, архитектурные шаблоны, используемые для одноразового движка и движка, предназначенного для работы с несколькими играми, весьма различны, даже если они обе имеют скрипты, управление ресурсами, 3D-рендеринг, и т.д. компоненты. Кроме того, поиск кода для игры, созданной на движке, разработанном той же студией, вероятно, не самый мудрый выбор, поскольку он не даст вам точного представления о том, насколько гибким и простым в использовании движком является среда сторонних разработчиков.
Ари Патрик

Ответы:

6

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

Например, я много работаю с Python / pygame (который является оберткой SDL). Мне очень нравится система, но меня беспокоило три вещи:

  • Создание цикла анимации утомительно, и все они практически одинаковы.
  • Основной объект спрайта очень ограничен. Я хотел улучшенный спрайт с направлением и скоростью, способностью обрабатывать различные условия экрана, несколько изображений и несколько схем столкновений.
  • Pygame не имеет функций пользовательского интерфейса. Я хотел простые метки, кнопки и средство выбора номера, которое я
    мог бы легко добавить в свои игры.

Было относительно легко создать объектно-ориентированную оболочку вокруг этих функций. Взгляните на главу 10 и документацию по Game Engine, доступную здесь: http://aharrisbooks.net/pythonGame/

(Это было написано как часть книги, но вы можете пользоваться игровым движком, даже если вам не нужна книга.)

Глава 10 объясняет мотивацию и методы создания базового движка 2D игры. Вы можете наслаждаться этим, когда создаете свой собственный. Фактический язык не так важен (за исключением того, что вам нужен язык ООП для поддержки ООП.) Если вы уже используете SDL с C ++, вы можете начать с адаптации моего движка к C ++ / SDL.

Два пи
источник
8

Почтенный дизайн движка Quake (ID tech) выдержал испытание временем и, возможно, является самым успешным дизайном игрового движка всех времен. Все, кроме рендера, практически не изменилось с конца середины 90-х годов и до сих пор используется в современных играх, таких как ETQW.

Полный исходный код для четырех итераций этого движка (Quake 1–3, плюс Wolf ET) доступен по лицензии GPL. Вероятно, существует более сотни активно разработанных поддерживаемых сообществом игровых движков Quake, которые поддерживают их актуальность в современную эпоху. Особенно стоит обратить внимание на XreaL для его фантастического рендерера и ioQuake3 для его точного обслуживания Quake 3, оптимизированного для современного оборудования. Кроме того, для более свежих «официальных» версий ID движка также доступна логика игры (не весь движок).

Даже если вы в конечном итоге не используете этот игровой движок, он заслуживает изучения благодаря продуманной архитектуре разделения клиент-сервер и отделению игровой логики от низкоуровневых деталей.

Макс Э.
источник
1
Я бы точно не назвал pre-Doom3 id tech объектно-ориентированным.
Тетрад
3
Нет, не объектно-ориентированный, но, как я уже сказал, это достойно изучения. Я имею в виду, давай, просто потому, что это процедурно, не значит, что это даст тебе рак глаз, если ты посмотришь на это! ;)
Макс Э.
6

Библиотека рендеринга Ogre3D довольно близка к коду движка, и, как я слышал, она очень хорошо спроектирована и очень хорошо выглядит.

http://www.ogre3d.org/

тетрада
источник
+1 Отличный двигатель. Спасибо Тетрад! Я уже знаю это, но я никогда не использовал и не видел его исходный код. Знаете ли вы, имеет ли он интегрированный ИИ (т.е. поиск пути и т. Д.)
Дани
3
Я думаю, что это просто рендеринг.
Тетрад
2
Ogre - это только библиотека рендеринга графики. Объектно-ориентированный движок рендеринга графики.
Джонатан Штернберг
0

Говоря об игровом движке, я полагаю, что вы думаете о чем-либо, кроме движка рендеринга, звукового движка, физического движка, движка ввода и т. Д.

Таким образом, вы можете подумать об игровой архитектуре, искусственном интеллекте или шаблонах / системах проектирования и т. Д., Которые используются для структурирования программного обеспечения в управление данными и другими компонентами для создания некой сцены / поклонника / иллюзии, создавая таким образом управляемые наборы правил для твик для создания актуальной "видеоигры".

Это настоящий верхний слой видеоигры, и я даже попытался немного узнать о нем, он обширный, сложный и требует много знаний по всем остальным предметам. Представьте, что вы хотите воссоздать альтернативную реальность из ничего, отследить и вычислить каждое событие и восстановить точные данные из них в любой момент: для каждого типа игры есть какой-то подмножество игрового движка, и я не Я думаю, что на самом деле можно сделать общий движок, который достаточно математически быстр. Даже для игры, в которой вы управляете одним персонажем, есть еще много вещей, которые могут варьироваться и могут требовать от игры изменения всей архитектуры.

Игровая индустрия не так хорошо обслуживается открытым исходным кодом, как другие области компьютерных наук, просто потому, что у развлечений есть разные виды лицензий, которые включают художественные лицензии: игровой продукт оплачивается только клиентом, а AFAIK - только Несколько движков, которые кажутся достаточно хорошими, чтобы работать для вас: Hord3d, NeoAxis, blendelf, Panda3D. Но я не могу заверить вас, что их будет так же легко использовать, как и такие инструменты, как Unity, Torque, C4 и другие; Имейте в виду, что игровой движок с графическим рендером, я думаю, самый сложный тип программного обеспечения, которое вы найдете в процессе создания игр.

jokoon
источник
0

Для меня использование Python с Pygame является хорошим решением. Возможно, Python немного медленный, но для современных компьютеров, и если вы просто попытаетесь оптимизировать свою игру, это не имеет значения. Pygame имеет очень хорошую документацию на оригинальном сайте Pygame. Но сначала возьмите начало урока, чтобы выучить некоторые основы. Для оптимизации скорости (преобразования изображений, ...) вам понадобятся другие примеры, которые легко найти.

Nmin
источник