Игры с С++ или С#?
Какой лучший язык для программирования игрового проекта и почему?
Почему в мире программирования игр доминирует С++?
Ответы
Ответ 1
Это довольно сложный вопрос. По большей части, С++ - "лучший" язык для программирования игр, поскольку он дает вам столько непосредственного контроля над управлением памятью, что у вас есть больше возможностей для точной настройки вашей производительности. Это, наряду с тем, что С++ было в возрасте дольше, чем С#, привело к его нынешнему доминированию в игровой индустрии.
Однако в наши дни, когда платформа .NET и С# становятся намного более зрелыми, ее нелегко исключить как очень сильного соперника на арене игрового программирования. Я думаю, что это особенно актуально в ближайшем будущем, так как .NET 4.0 и С# 4.0 приведут к совершенно новой эре многопоточного и параллельного программирования, что может принести огромную производительность на их платформу. Благодаря многоядерному процессору, занимающемуся настольным компьютерным миром штурмом, а процессор с массивным процессором только на небольшом шаге от .NET/С# 4.0, я считаю, что легкость разработки многопоточных приложений с .NET и С# 4.0 даст С++ возможность запуска деньги.
В конце концов, это будет полностью зависеть от того, какой контроль вы считаете нужным для управления памятью, и стоит ли этот контроль на арене массово параллельных игр. Если вам нужен этот элемент управления и вы думаете, что можете справиться с попыткой написать высокопараллельную игру на С++, то вы, вероятно, получите что-то от нее. В противном случае я бы сказал, что С# 4.0 будет лучшим вариантом.
Обновление 2011 года:
Следует, наверное, отметить, что теперь, спустя два года с того момента, когда я изначально написал это, игры Silverlight, особенно Silverlight на Windows Phone 7, стали большой и быстро растущей платформой, на которой игры, часто довольно продвинутые игры, разработаны. Gaming на WP7 взорвался с момента запуска платформы в ноябре 2010 года, и уже WP7 имеет больше игр, разработанных для нее, чем конкурирующие платформы. Учитывая вездесущность мобильных устройств и популярность игр на них, я считаю, что это сильный признак мощности и возможностей С# в качестве языка разработки игр. Довольно много игр WP7 - это полностью 3D-графические игры.
Ответ 2
Для коммерческих/крупных проектов, возможно, лучший вариант С++. Однако, если вы думаете о том, чтобы делать более мелкие игры инди-типа, вы ничего не прекращаете с помощью С# или даже Java.
Я сделал несколько небольших игр с С++ и один с С#, используя XNA Framework, в основном для любопытства. В настоящее время я работаю над платформерной игрой с использованием Java и LWJGL (легкая библиотека Java-игр). И угадай что? Он работает абсолютно нормально, плюс я получаю кросс-платформенную совместимость практически бесплатно! Причина, по которой я начал этот проект с Java, состояла в том, чтобы увидеть, могу ли я создать хорошую игру с ускорением OpenGL, используя Java вместо С++, который я обычно использовал. Пока он работает очень хорошо для меня, я действительно был удивлен. =) Честно говоря, я немного устал от С++, кодирование на Java в наши дни намного более продуктивно (большое спасибо Eclipse IDE!).
Итак, для небольших игр вы, безусловно, можете добиться успеха с Java или С#, не нужно беспокоиться о С++, если вы не делаете то, что требует 100% возможной производительности. XNA может быть самым простым вариантом для начала работы, хотя для меня я, скорее всего, больше не буду его использовать, так как это в основном только Windows (плюс Xbox 360).
Ответ 3
Игры - это одни из самых аппаратных приложений, которые вы можете запустить. Люди программируют игры на С++ для производительности, хотя в настоящее время есть несколько игр, написанных на С#.
Этот вопрос задан раньше, проверьте следующие сообщения для получения дополнительной информации:
Жизнеспособность С#/.NET как новой стандартной платформы для игр?
https://stackoverflow.com/questions/19642/suggested-gaming-platform-to-learn-direct-x-c-open-gl-or-xna
Ответ 4
Потребовались годы, чтобы заставить разработчиков игр собраться на C, а затем потребовалось больше лет, чтобы превратить индустрию в С++. Причина всегда одна и та же... "C будет слишком медленным", "Объекты будут замедляться". Есть огромные инвестиции в код (двигатели, предыдущие игры и т.д.) И талант в отрасли на С++. Переход на это займет много времени - как и в прошлом. Когда-нибудь игры будут разработаны в управляемом коде, но это займет некоторое время.
Между тем существуют движки, написанные для .NET на С#.
Ответ 5
Я думаю, вы обнаружите, что когда вы создаете свою собственную игру, это узкое место в процессоре (единственный аспект, на котором выбор языка имеет какой-либо эффект) - это последнее, что вам нужно беспокоиться. Это намного, намного легче быть узким местом для GPU. Черт, с сегодняшним минимумом в 2 ядра, мне показалось бы впечатляющим, если бы вам даже удалось достичь 100% использования процессора, потому что для этого потребуется идеальное разделение рабочей нагрузки для использования 2 или 4 ядер процессора.
Как правило, для меня слишком часто запускать игру (предположительно написанную на С++), чтобы увидеть, что она использует не более 50% -60% моего процессора. И можете ли вы тогда действительно говорить о узком месте с языком, который вы используете, или узким местом используемых алгоритмов, которые не позволяют масштабировать более чем на 1 процессорном ядре? Поэтому даже в ситуации, когда вы сталкиваетесь с одним ядром, все же можно (теоретически) удвоить свою производительность, оптимизировав свои алгоритмы, прежде чем вы сможете действительно сказать, что вы ограничены языком.
И это только увеличится в будущем с появлением 8, 16 и 32 ядер. Вы действительно не хотите иметь игру, которая способна использовать только 1 ядро из 32.
Настоящая причина, по которой С# не используется в отрасли: нет причин, достаточных для игровых студий, которые вложили много денег в свой код на С++, чтобы переключиться на С#. Не только их код, но и их разработчики уже очень хороши на С++, поэтому было бы странно переключаться на С# для "простоты использования", когда это на самом деле означает много новых проблем для преодоления и много денег для перезаписи существующего кода. И после всего этого у вас есть новый код, который поддерживается только на ПК (с поддержкой Mono для Linux) и Xbox 360. Нет PS3, нет Wii. Таким образом, вы просто ограничили себя ради небольшого выигрыша.
Ответ 6
Если вы используете С++, у вас намного большая база кода, хотя это не имеет значения для большинства игр (кроме 3D-игр или игр, для которых нужны библиотеки, такие как физические движки). С# можно было бы легче писать, в зависимости от того, сколько у вас опыта (или насколько меньше опыта у вас есть с С++).
Также рассмотрите возможность использования своего рода инструмента для создания игр, такого как XNA Game Studio или аналогичного, они часто могут дать вам всяческую помощь с обычным материалом.
Ответ 7
"Производительность" - это красная селедка. Да, игры - это самое сложное приложение, которое будет выполнять большинство потребителей. Тем не менее, большая часть тяжелого подъема может быть выполнена с помощью специального оборудования, которое будет бить программное решение на любом языке в любой день недели. Распространение Flash-игр должно быть достаточно доказательством того, что в большинстве случаев у нас есть производительность для записи (и теперь, когда у нас есть некоторые достойные реализации, я думаю, что мы скоро увидим игры, которые появляются в Javascript тоже).
Я думаю, что многие другие языки объявляются как ориентированные на бизнес, или академические, или статистические, и разработчики в целом действительно не чувствовали необходимости оспаривать эти предположения.