C ++ дают вам более точный контроль над фактическим оборудованием и продвижением битов. Для общих бизнес-потребностей язык третьего поколения, такой как Java или C #, быстрее программируется и избавляет разработчика от таких забот, как указатели и сборка мусора. Это происходит за счет отсутствия возможности оптимизировать и настраивать использование памяти и структур данных.
Вы также можете использовать гибридный подход: разбить игру на язык более высокого уровня для написания сценариев и т. Д., А затем «бросить» в землю C ++ для частей, требующих скорости и оптимизации.
Единственный прием, который C++ имеет по сравнению с большинством других языков высокого уровня, это то, что "вы не платите за то, что не используете". В языке нет таких "закулисных" функций, как сборка мусора, подсчет ссылок, синхронизация, рефлексия, интроспекция, проверка границ, проверка типов во время выполнения, метаклассы и так далее, каждая из которых может накладывать издержки на общую работу.
Конечно, большинство из этих возможностей очень полезны, поэтому в C++ вам придется потратить гораздо больше времени, чтобы получить те же результаты. Стоит ли это усилий или нет, обычно сводится к вопросу о том, с каким количеством унаследованного кода вам приходится работать.
По мере того, как машины становятся более мощными и большая часть рабочей нагрузки переключается на оборудование (в некоторых случаях графика и даже физика), появляется больше системных ресурсов, доступных для выполнения других задач. Таким образом, несмотря на то, что C ++ по-прежнему является отраслевым стандартом, простые оптимизации, которые он обеспечивает, больше не являются основной причиной его использования. Основная причина его использования заключается в том, что большинство API-интерфейсов для разработки игр - это API-интерфейсы C ++. Вы редко хотите писать свой собственный движок, и даже если вы пишете свой собственный движок, вы, скорее всего, повторно используете стандартные низкоуровневые компоненты, такие как NVidia PhysX, DirectX, OpenGL и т. Д. Некоторые из них теперь имеют интерфейсы управляемого кода, но основные API-интерфейсы предназначены для C ++, поскольку он так широко используется.
Еще одна тенденция, которую стоит отметить, заключается в том, что сегодня во многих играх используются языки сценариев, такие как Python или Lua, для управления большей частью игровой логики. Это дает вашим разработчикам контента и разработчикам модификаций гибкость, позволяющую обеспечить расширенное поведение без необходимости кодирования на C ++ или сборки. Создание сценариев не является сверхвысокопроизводительным, но оно чрезвычайно удобно, и современные ПК обладают достаточной мощностью для обработки сценариев.
Games - это программное обеспечение, критичное к производительности, которое требует 100% использования аппаратного обеспечения пользователя, а C ++ - это единственный популярный язык, который дает вам такие способности:
По этой причине вы найдете C ++ не только в разработке игр, но и во многих других областях, которые требуют от вас максимальной производительности, минимального использования ресурсов и хорошей способности к оптимизации, таких как, например, базы данных, системное программирование и многие другие области. .
Некоторые другие аспекты, которые, как мне кажется, не были упомянуты:
OpenGL и DirectX очень совместимы с C++. Добавьте тот факт, что у вас есть более тонкий контроль над памятью, распределением памяти, и вы можете использовать достаточно возможностей C++, чтобы сделать разработку "проще", чем на C, чтобы получить некоторые из причин.
ничто не мешает вам использовать таймер для написания игр на C ++.
Для этого вы можете изучить метод C ++ Boost thread :: sleep.
Существует солидная кодовая база для игр, и она в основном на C++. Большинство игровых движков реализовано на C++, и это потому, что, как кто-то ранее упомянул, OpenGL и DirectX также реализованы на C++. Далее, игры всегда расширяют границы аппаратного обеспечения, и поэтому код должен быть настолько быстрым и оптимальным, насколько это возможно...
На противоположной стороне находятся офисные/бизнес-приложения, которым просто необходимы более быстрые циклы разработки, стабильность и максимальная расширяемость.
Из того, что я всегда понимал, это правило применимо и к спорту.
Speed kills.
Все о скорости.
C++ обладает сочетанием эффективности и абстракции, что делает его по-прежнему единственным практическим выбором для крупномасштабных систем, требующих эффективных ответов[1].
Уровни аппаратного интерфейса, как правило, также находятся на C или C++, что означает, что не нужно устанавливать интерфейс на иностранном языке для общения с уровнями аппаратной абстракции.
Кроме того, преимуществом этого языка является наличие большого сообщества, имеющего опыт написания игр, а также многочисленных фреймворков.
От себя лично скажу, что я использовал игры, написанные на других языках, и они неизменно были медленнее.
[1] Ada или Delphi также могут быть полезны в этой области, но уровень их популярности означает, что их выбор не так прагматичен, если только у вас нет нишевой потребности.
В значительной степени это основано на двух вещах:
В течение многих лет C ++ был единственным * выбором для высокопроизводительных приложений любого типа, включая игры. В результате были вложены значительные средства в игровые движки и библиотеки, также написанные на C ++.
Даже сегодня большинство игровых фреймворков написано на C ++. XNA допускает использование C #, но даже Microsoft продолжает продвигать C ++ в качестве предпочтительного языка.
* да, это субъективно ...
Какая техника использует это в C ++? пользователи могут разрабатывать производительные игры?
Ничего такого, чего нет (также) на других языках.
Преимущество C ++ над другими языками (до некоторой степени субъективно) не в используемых методах.
Это комбинация нескольких факторов, делающих его достаточно низкоуровневым и достаточно высоким для того, что необходимо:
он детерминирован (вы можете определить, что и когда будет выполнено). Это неверно для языков со сборкой мусора и (или частично) неверно для языков, работающих на виртуальных машинах.
он предлагает высокую производительность (вы можете получить производительность, подобную C, и даже добавить некоторый ассемблерный код, если захотите).
он предлагает достаточно абстракции для более высокого уровня, чем другие быстрые языки (например, C).
В конце концов, это что-то близкое как к языкам низкого уровня, так и к языкам высокого уровня.
Здесь есть ряд причин.
Переносимость
Неужели кто-то действительно думает, что Sony будет использовать C # в одной из своих консолей? Будет ли Nintendo развертывать JVM на Wii2?
Нет.
Что, если Microsoft перейдет на C # со следующей Xbox? Угадайте, что они не будут. Это удвоило бы кодовую базу для всех сторонних разработчиков, что сделало бы новую консоль Microsofts гораздо менее привлекательной для разработки.
Итак, C ++ - очевидный выбор, потому что ему просто нужен компилятор для соответствующей архитектуры.
Производительность
Кроме того, ядро 3D-движков, скорее всего, всегда будет написано на C / C ++, а часть - в ASM, просто из-за того, что вы хотите выжать каждый бит производительности на консолях, где ваша среда в основном забит камнем.
Время разработки
До появления всех лицензируемых движков было время, когда разработка первого поколения программных продуктов занимала очень много времени только потому, что вам нужно было написать совершенно новый движок для своей Игры на новой платформе. , что требует времени. С учетом того, что на разработку большой игры уже уходят годы, это стоит больших денег. Так что всегда было проще взять существующий код и «обновить» его до следующего поколения. Затем со временем вы постепенно улучшите его. Принимая это во внимание, легко видеть, что ни один из производителей консолей не хотел заставлять своих разработчиков сталкиваться с еще более длительным временем разработки, переключая свою консоль на что-то иное, чем C / C ++.
Итак, чтобы подвести итог. Переносимость, производительность и унаследованный код - вот причины, по которым C / C ++ по-прежнему является основным игроком в разработке игр.
Я хотел бы обратить внимание на несколько вещей, которые люди упускают из виду. Во-первых, C++ доминирует в индустрии, потому что у большинства студий есть существующий 3D движок с кодом C++. Во-вторых, они создали его или работали с ним годами. Только эти два пункта делают разумным оставаться с C++. В-третьих, родной C++ всегда будет немного быстрее управляемых языков, потому что у него нет накладных расходов, связанных с тем, что он... ну, управляемый.
Однако имейте в виду, что это относится к существующим игровым студиям, инди-сцена немного отличается, и я думаю, что именно здесь XNA действительно набирает скорость. Во-первых, она позволяет получить доступ к трем устройствам (pc, xbox, zune), и это даже не считая моно xna. Разница в скорости почти никогда не стоит того, чтобы беспокоиться о ней на таком уровне, и это просто более продуктивно.
Надеюсь, я дал вам повод для размышлений.
Сильной стороной C ++, когда дело доходит до разработки игр, является способность точно размечать структуры данных, которые будет использовать ваше программное обеспечение. Когда производительные системы реального времени (например, игры) начали расти, это был наиболее широко поддерживаемый и наиболее разработанный язык программирования. Таким образом, это был естественный выбор для игр, которые пытаются довести платформу до предела своих возможностей. Это в конечном итоге привело к тому, что большинство разработчиков согласились с этим выбором, даже если им это нужно или нет.
C ++ предоставляет возможность преодолевать важные узкие места производительности, такие как выделение памяти. У него есть способность структурировать и размещать вещи именно там, где они хотят в памяти. Вдобавок ко всему это гибкий язык программирования, обеспечивающий приличную скорость разработки.