Является ли C ++ «все еще» предпочтительным в разработке игр? [закрыто]

17

Я программист 2D игр. Некоторые языки программирования, в которых я хорошо разбираюсь, это C, Java, C #. Я также знаю Actionscript 2.0,3.0 и немного JavaScript. Я заинтересован в изучении программирования 3D игр. Так далеко от исследований, которые я накопил, гуглил и читал различные форумы и статьи по разработке игр. Я заметил, что большинство программистов, как правило, предпочитают C ++. Также в курсе обучения программированию онлайн-игр я заметил, что они предпочитают преподавать C ++ и Visual C ++ в качестве начального курса. Причина, по которой я задаю этот вопрос, так как я хотел бы знать разницу в силе C ++, C # и Java для программирования трехмерных игр.

Также включите ссылки на хорошие статьи по программированию 3D-игр для уже 2-го программиста игр.

PS: ИМХО, я также считаю C ++ загадочным.

Вишну
источник
Я тоже это много понимаю. Таким образом, заданный вопрос в сообществе относительно того, какими навыками должен обладать профессиональный программист игры. Получил несколько хороших ответов, сосредоточившись на C ++ как на лучшем языке для разработки игр. проверьте .. gamedev.stackexchange.com/questions/5552/…
GamDroid
@GamDroid: Мне не интересно знать, что делает профессиональный программист 2d игр. Мне интересно знать о Visual C ++ и о том, почему о нем так много говорят.
Вишну
2
Кстати: Visual C ++? Не просто C ++?
спидер
Редактор Visual C ++ - это круто, но язык Visual C ++ (то есть: C ++ с Win32 GUI API и тому подобное, как с MS Visual C ++, так и с Borland C ++ Builder) довольно запутанный и не должен использоваться для игр (он слишком раздутый, и использование GDI медленнее, чем, скажем, SDL, чтобы управлять окном)
speeder
1
@Vish, извините, не стесняйтесь редактировать его, чтобы быть более точным, имея в виду комментарии до сих пор. Если вы имеете в виду, что программирование на Win32 сбивает с толку, то скажите это.
Тетрад

Ответы:

30

Да, C ++ - это язык, который используется чаще всего (хотя некоторые люди до сих пор используют C).

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

Тогда есть проблема контроля. Разработчики игр - фанаты управления, и нам нравится знать все, что происходит в нашем коде. C ++ дает нам тот контроль, C # и Java (чтобы выбрать две альтернативы, которые вы упомянули) отнять контроль. Во многих отношениях это может быть хорошо, но разработчикам игр это не нравится :)

Наконец, есть простая практическая проблема, заключающаяся в том, что SDK для различных платформ очень ориентированы на C ++. Использование другого языка неизбежно включает в себя написание оболочек, кросс-компиляцию до виртуальных машин и, возможно, (в случае некоторой разработки консоли) это не разрешается держателем платформы (им действительно не нравятся люди, выполняющие JIT-компиляцию, для начала).

JasonD
источник
2
В основной индустрии развития, да.
JasonD
2
Что касается языков, C ++, в первую очередь - это никуда не денется в ближайшее время. Я бы предположил, что также не помешало бы познакомиться с языками сценариев - Lua, Python и т. Д.
JasonD
8
Visual C ++ - это не язык, это IDE.
SurvivalMachine
2
Да, хотя это, вероятно, наиболее используемая IDE, поэтому стоит узнать об этом одновременно с изучением C ++.
JasonD
1
@SurvivalMachine Ну, технически это диалект (существует множество расширений MSVC ++, которых нет в стандарте)
bobobobo
4

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

Придерживаться С заставляет меня быть минималистичным и думать о том, что я делаю. Иногда бывает сложнее, когда вам нужно переопределить то, что STL дает вам бесплатно, но, с другой стороны, я чувствую, что пишу более чистый код и лучше отлаживаю эту вещь.

Армин Ронахер
источник
3
RAII вполне приемлем (и должен поощряться) в игровом коде.
каменный металл
1
@stonemetal: RAII способствует задержке и, следовательно, непредсказуемому распределению ресурсов. Должно ли это поощряться или нет, зависит от размера вашей игры и ваших целевых платформ (и рассматриваемого ресурса); в среднем я бы не поощрял это. Кроме того, RAII в C ++ чаще всего используется с распределением кучи, потому что OO в C ++ делает выделение стека слишком сложным.
3
Каким образом RAII способствует отложенному распределению ресурсов? Когда я использую GLFW, я создаю класс под названием GLFWRAII, который вызывает функцию init GLFW в конструкторе и вызывает процедуру очистки GLFW в деструкторе. Я размещаю его в стеке в начале main, это никоим образом не задерживает и не делает ничего непредсказуемого. Другие варианты использования могут заключаться в выделении в начале уровня и очистке в конце уровня. Плохое использование техники не делает ее плохой. Ничто в RAII не предлагает непредсказуемое распределение ресурсов, кроме плохого использования.
каменный металл
Вы просто должны избегать использования этих функций. Я использую C ++, и я никогда не использую шаблоны в своем коде, и у меня нет объектов, генерирующих исключения в их конструкторах. В C вы все еще можете использовать динамическое размещение (и вы должны для 3D-игры). Кроме того, вы должны кодировать так, чтобы кому-то еще было легко это понять - большой проект в чистом C-коде может быть адом, даже если вы его понимаете. Если вы научитесь думать о том, что делаете, даже если язык не заставляет вас это делать, вы сможете писать чистый код и на многих других языках.
Пабло Ариэль
1

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

Тем не менее, иногда другие языки работают довольно хорошо для разработки игр. Я использую Java с LWJGL, и это удивительно. Так что если вы хотите начать с 3D-программирования и OpenGL без изучения C ++, попробуйте LWJGL с Java, потому что он очень легкий и, на мой взгляд, на самом деле код C ++ работает через JNI.

Возможно, в конечном итоге вы захотите переключиться на C ++, но вы можете начать и попрактиковаться с C # или Java. Потому что большая часть игрового кода основана на опыте с языком, но вы должны попробовать OpenGL на языке, который вам удобен. Кроме того, в то время как вы практикуете графику, вы должны также попробовать GLSL с OpenGL, он имеет очень C-подобный синтаксис

Romejanic
источник