Почему C++ то, что мощная касающаяся разработка игр? [закрытый]

19
задан oopbase 23 July 2010 в 14:08
поделиться

15 ответов

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

Вы также можете использовать гибридный подход: разбить игру на язык более высокого уровня для написания сценариев и т. Д., А затем «бросить» в землю C ++ для частей, требующих скорости и оптимизации.

27
ответ дан 30 November 2019 в 02:05
поделиться

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

Конечно, большинство из этих возможностей очень полезны, поэтому в C++ вам придется потратить гораздо больше времени, чтобы получить те же результаты. Стоит ли это усилий или нет, обычно сводится к вопросу о том, с каким количеством унаследованного кода вам приходится работать.

0
ответ дан 30 November 2019 в 02:05
поделиться

По мере того, как машины становятся более мощными и большая часть рабочей нагрузки переключается на оборудование (в некоторых случаях графика и даже физика), появляется больше системных ресурсов, доступных для выполнения других задач. Таким образом, несмотря на то, что C ++ по-прежнему является отраслевым стандартом, простые оптимизации, которые он обеспечивает, больше не являются основной причиной его использования. Основная причина его использования заключается в том, что большинство API-интерфейсов для разработки игр - это API-интерфейсы C ++. Вы редко хотите писать свой собственный движок, и даже если вы пишете свой собственный движок, вы, скорее всего, повторно используете стандартные низкоуровневые компоненты, такие как NVidia PhysX, DirectX, OpenGL и т. Д. Некоторые из них теперь имеют интерфейсы управляемого кода, но основные API-интерфейсы предназначены для C ++, поскольку он так широко используется.

Еще одна тенденция, которую стоит отметить, заключается в том, что сегодня во многих играх используются языки сценариев, такие как Python или Lua, для управления большей частью игровой логики. Это дает вашим разработчикам контента и разработчикам модификаций гибкость, позволяющую обеспечить расширенное поведение без необходимости кодирования на C ++ или сборки. Создание сценариев не является сверхвысокопроизводительным, но оно чрезвычайно удобно, и современные ПК обладают достаточной мощностью для обработки сценариев.

0
ответ дан 30 November 2019 в 02:05
поделиться

Games - это программное обеспечение, критичное к производительности, которое требует 100% использования аппаратного обеспечения пользователя, а C ++ - это единственный популярный язык, который дает вам такие способности:

  • Высокий уровень абстракции - прекрасный объектно-ориентированное программирование и общее программирование
  • Очень хороший и детерминированный контроль используемых вами ресурсов.
  • Возможность оптимизации специальных частей до очень высокого уровня, чего практически невозможно достичь с другими популярными языками.

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

1
ответ дан 30 November 2019 в 02:05
поделиться

Некоторые другие аспекты, которые, как мне кажется, не были упомянуты:

  • C++ не использует сборку мусора (в отличие, например, от C#) - это может быть печально, если игра остановится на мгновение для сборки мусора. Для консольной игры, которая должна работать со скоростью 30 или 60 кадров в секунду, это может стать проблемой.
  • Разработчики игр часто уделяют время оптимизации кода. В C++ для этого есть нужные инструменты. Например, большинство компиляторов поддерживают внутренние функции, поэтому можно напрямую использовать инструкции SSE. Еще одна вещь, которую часто делают программисты игр, - это проверка сгенерированного ассемблера и соответствующая настройка кода на Си, например, для устранения динамических ветвлений. Отказ от виртуальных функций также может дать преимущества в скорости (например, во многих других языках есть только методы с динамическим полиморфизмом - с соответствующими издержками производительности).
  • С точки зрения многих разработчиков игр, этот язык является более кроссплатформенным, чем C# или Java. Можете ли вы запустить Java или C#, например, на PS3? (правка: Mono используется по крайней мере одним популярным кроссплатформенным игровым движком, так что C# возможен, но включение Mono может быть препятствием, если не использовать этот движок)
1
ответ дан 30 November 2019 в 02:05
поделиться

OpenGL и DirectX очень совместимы с C++. Добавьте тот факт, что у вас есть более тонкий контроль над памятью, распределением памяти, и вы можете использовать достаточно возможностей C++, чтобы сделать разработку "проще", чем на C, чтобы получить некоторые из причин.

2
ответ дан 30 November 2019 в 02:05
поделиться

ничто не мешает вам использовать таймер для написания игр на C ++.

Для этого вы можете изучить метод C ++ Boost thread :: sleep.

http://www.boost.org/doc/libs/1_38_0/doc/html/thread/thread_management.html#thread.thread_management.thread.sleep

1
ответ дан 30 November 2019 в 02:05
поделиться

Существует солидная кодовая база для игр, и она в основном на C++. Большинство игровых движков реализовано на C++, и это потому, что, как кто-то ранее упомянул, OpenGL и DirectX также реализованы на C++. Далее, игры всегда расширяют границы аппаратного обеспечения, и поэтому код должен быть настолько быстрым и оптимальным, насколько это возможно...

На противоположной стороне находятся офисные/бизнес-приложения, которым просто необходимы более быстрые циклы разработки, стабильность и максимальная расширяемость.

3
ответ дан 30 November 2019 в 02:05
поделиться

Из того, что я всегда понимал, это правило применимо и к спорту.

Speed kills.

Все о скорости.

3
ответ дан 30 November 2019 в 02:05
поделиться

C++ обладает сочетанием эффективности и абстракции, что делает его по-прежнему единственным практическим выбором для крупномасштабных систем, требующих эффективных ответов[1].

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

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

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

[1] Ada или Delphi также могут быть полезны в этой области, но уровень их популярности означает, что их выбор не так прагматичен, если только у вас нет нишевой потребности.

5
ответ дан 30 November 2019 в 02:05
поделиться

В значительной степени это основано на двух вещах:

  • История
  • Текущие фреймворки

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

Даже сегодня большинство игровых фреймворков написано на C ++. XNA допускает использование C #, но даже Microsoft продолжает продвигать C ++ в качестве предпочтительного языка.

* да, это субъективно ...

13
ответ дан 30 November 2019 в 02:05
поделиться

Какая техника использует это в C ++? пользователи могут разрабатывать производительные игры?

Ничего такого, чего нет (также) на других языках.

Преимущество C ++ над другими языками (до некоторой степени субъективно) не в используемых методах.

Это комбинация нескольких факторов, делающих его достаточно низкоуровневым и достаточно высоким для того, что необходимо:

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

  • он предлагает высокую производительность (вы можете получить производительность, подобную C, и даже добавить некоторый ассемблерный код, если захотите).

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

В конце концов, это что-то близкое как к языкам низкого уровня, так и к языкам высокого уровня.

12
ответ дан 30 November 2019 в 02:05
поделиться

Здесь есть ряд причин.

  1. Переносимость
    Неужели кто-то действительно думает, что Sony будет использовать C # в одной из своих консолей? Будет ли Nintendo развертывать JVM на Wii2?

    Нет.

    Что, если Microsoft перейдет на C # со следующей Xbox? Угадайте, что они не будут. Это удвоило бы кодовую базу для всех сторонних разработчиков, что сделало бы новую консоль Microsofts гораздо менее привлекательной для разработки.

    Итак, C ++ - очевидный выбор, потому что ему просто нужен компилятор для соответствующей архитектуры.

  2. Производительность
    Кроме того, ядро ​​3D-движков, скорее всего, всегда будет написано на C / C ++, а часть - в ASM, просто из-за того, что вы хотите выжать каждый бит производительности на консолях, где ваша среда в основном забит камнем.

  3. Время разработки
    До появления всех лицензируемых движков было время, когда разработка первого поколения программных продуктов занимала очень много времени только потому, что вам нужно было написать совершенно новый движок для своей Игры на новой платформе. , что требует времени. С учетом того, что на разработку большой игры уже уходят годы, это стоит больших денег. Так что всегда было проще взять существующий код и «обновить» его до следующего поколения. Затем со временем вы постепенно улучшите его. Принимая это во внимание, легко видеть, что ни один из производителей консолей не хотел заставлять своих разработчиков сталкиваться с еще более длительным временем разработки, переключая свою консоль на что-то иное, чем C / C ++.

Итак, чтобы подвести итог. Переносимость, производительность и унаследованный код - вот причины, по которым C / C ++ по-прежнему является основным игроком в разработке игр.

2
ответ дан 30 November 2019 в 02:05
поделиться

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

Однако имейте в виду, что это относится к существующим игровым студиям, инди-сцена немного отличается, и я думаю, что именно здесь XNA действительно набирает скорость. Во-первых, она позволяет получить доступ к трем устройствам (pc, xbox, zune), и это даже не считая моно xna. Разница в скорости почти никогда не стоит того, чтобы беспокоиться о ней на таком уровне, и это просто более продуктивно.

Надеюсь, я дал вам повод для размышлений.

0
ответ дан 30 November 2019 в 02:05
поделиться

Сильной стороной C ++, когда дело доходит до разработки игр, является способность точно размечать структуры данных, которые будет использовать ваше программное обеспечение. Когда производительные системы реального времени (например, игры) начали расти, это был наиболее широко поддерживаемый и наиболее разработанный язык программирования. Таким образом, это был естественный выбор для игр, которые пытаются довести платформу до предела своих возможностей. Это в конечном итоге привело к тому, что большинство разработчиков согласились с этим выбором, даже если им это нужно или нет.

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

0
ответ дан 30 November 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: