Жизнеспособность C # /. NET как новой стандартной игровой платформы для разработчиков?

В течение долгого времени C ++ был доминирующим языком разработки игр. Многие качественные 3D-движки AAA доступны на любой бюджет.

Мой вопрос заключается в том, что с появлением XNA C + и платформа .NET были достаточно хорошо позиционированы, чтобы стать новой стандартной платформой для разработки игр? Очевидно, что кроссплатформенная природа платформы XNA (Windows, Xbox, Zune) имеет свои преимущества, но достаточно ли этих преимуществ, чтобы побудить большие студии разработчиков игр переключать передачи?

Лично я разрываюсь между использованием C # / XNA для нового проекта и использованием Java через jMonkeyEngine. Я очень хочу, чтобы моя игра была переносимой на несколько платформ, и единственные языки, которые я знаю достаточно хорошо для этого, - это C # и Java. Мне бы очень хотелось увидеть реализацию кодовой базы XNA, которая работает на OpenGL и будет работать на Mono, но я думаю, что на данный момент это просто желаемое за действительное.

Мне любопытно услышать, что испытали другие, создавая 3D-игры не на C ++.

10.12.2008 13:39:53
13 ОТВЕТОВ
РЕШЕНИЕ

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

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

C # - хороший язык для разработки игр. При разработке игр создаются приложения, требующие звука, продвинутой графики, искусственного интеллекта, физики и т. Д. Все это требует мощной и довольно быстрой языковой среды. В то время как большинство компьютерных и консольных игр высшего уровня написаны на C ++, C # имеет план действий, который, вероятно, оставит C ++ позади. Грядущие изменения в C ++ 0x, без сомнения, на некоторое время оживят C ++, но C # выглядит готовым его обогнать.

Если вы действительно хотите стать разработчиком игр, я бы посоветовал вам хотя бы изучить C ++ и написать собственный игровой движок. Использовать готовый игровой движок легко, и вы можете кодировать что-то «хорошо», но вы столкнетесь со многими ограничениями, которые вы не сможете кодировать. Вы будете эффективно ограничены возможностями игрового движка (если у вас нет доступа к источнику, который вы затем можете изменить по своему вкусу).

Изучайте C ++ и, предпочтительно, OpenGL :) Когда вы знаете OpenGL, вы можете довольно легко изучить DirectX.

C # это кусок пирога, если вы знаете C ++.

17
29.08.2010 15:20:26
Как насчет управляемого DirectX, существуют ли какие-либо розничные игры, которые были написаны в полностью управляемом коде с использованием управляемого DirectX? Что-то, о чем я всегда удивлялся ....
BFree 10.12.2008 14:00:22
@Brock Woolf: XNA не намного больше, чем управляемая оболочка DirectX, хотя и большая. Если вы говорите «каждая игра XNA - один и тот же ужасный FPS», не путаете ли вы это с такими вещами, как Game Studio 3D, или как называется последняя версия? XNA не игровой движок.
OregonGhost 10.12.2008 14:05:46
Все современные игры написаны на С ++? Для небольших значений «всего» и ограничительных значений «современных». Большое и растущее число игр написано на Flash, чтобы выбрать одно очевидное исключение. В разработке игр гораздо больше, чем в консольных играх.
Robert Rossney 13.12.2008 19:00:23
С другой стороны, О. П. был просить о «новой платформе стандарта для разработки игр» и 3D - играх. Ничего.
Robert Rossney 13.12.2008 19:03:13
@BFree: Я знаю об Arena Wars, довольно впечатляющей коммерческой RTS, написанной на управляемом dx. uk.pc.ign.com/objects/692/692397.html
Adam Naylor 31.01.2009 14:38:30

Что ж, между ними тоже, я думаю, C # / XNA - явный победитель, основанный на поддержке библиотек и действительно зрелости, учитывая опыт Microsoft в DirectX. При этом я не вижу, чтобы C # / XNA, заменяющий C ++, стал языком общения в серьезном программировании для 3D-игр (т. Е. У крупных разработчиков) в течение очень долгого времени, если вообще когда-либо.

1
10.12.2008 13:48:28

Это не просто студии, чтобы рассмотреть, это аудитория. Скорее всего, пока Sony и Nintendo существуют, они вряд ли будут перемещать платформу C # / XNA. По крайней мере, для Nintendo, когда у вас есть привлекательность для массового рынка, которую они в настоящее время делают, они будут продолжать диктовать свою платформу разработки.

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

1
10.12.2008 13:59:35

В то время как некоторое время назад было объявлено о XNA Professional, Microsoft теперь, похоже, сосредоточена на выпуске Express (хотя в названии он потерял «Express»), и, похоже, он нацелен на рынок любителей, а не на коммерческий рынок. Среди прочего, это в значительной степени приносит пользу сообществу XBox 360, поскольку теперь они позволяют разработчикам-любителям разрабатывать свои игры для Windows и XBox 360, а затем продавать свои игры в сети XBox , и это хорошо.

Мне бы очень хотелось, чтобы XNA набирала обороты в профессиональном мире, но этого не произойдет, если она не будет доступна для других основных игровых платформ (PS3 и Wii). Проблема заключается не только в XNA framework / API, но и в требованиях к языку / framework, поэтому вы даже не можете написать игру на C #, а затем использовать XNA на платформах Microsoft и OpenGL на других платформах.

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

Редактировать:

Если ваш вопрос на самом деле «должен ли я использовать XNA сейчас для моего проекта с бюджетом, значительно меньшим миллиона», мой ответ определенно - да. Попробуй, это бесплатно. И это мощно.

13
10.12.2008 16:33:14
Да, один хороший пример этого - игра (Sharky's Air legends) sharky.bluecog.co.nz Этот один разработчик создал игру, используя XNA в свое свободное время, и теперь она публикуется.
Daemin 4.01.2009 01:24:41

Я работал в месте под названием Newfire в конце 90-х. До того, как финансирование иссякло, у нас был двигатель, который мог создать захватывающий мир размером 10 000 квадратных километров с разрешением 10 см. Вы можете получить огромное количество игроков одновременно и постоянно деформировать ландшафт. Этот двигатель работал с частотой кадров на P200 с картой Voodoo 2.

Большая часть движка была написана на тщательно настроенном C ++. Весь игровой код был написан на C или C ++ или Java. У меня также был прототип кода, который мог определять поведение объекта с помощью автоматов, которые могли делать очень приличный ИИ. Это заняло почти нет процессорного времени. Выполнение игровой логики было затуманено рендерингом.

В какой-то момент у меня была демонстрация «Игры жизни» Конвея, работающей на Java с использованием нашего программного рендерера. Клетки представляли собой кубы, лежащие в плоскости, которая появлялась или исчезала и меняла цвет по мере старения в течение нескольких поколений. В то время как игра работала с фиксированной скоростью генерации 4 поколения в секунду, 3D-дисплей работал на скорости более 20 кадров в секунду, снова на P200 с программным средством визуализации.

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

10
10.12.2008 14:27:04
Да, однако ваши аргументы основаны на фактах около 10 лет (или более) назад. Сегодня C ++ - это то, что используется в играх, возможно, с некоторым встроенным ассемблером и GLSL / HLSL.
Brock Woolf 11.12.2008 02:47:14
Игры теперь используют Lua как язык для написания правил и т. Д., Но ядро ​​игры все еще написано на C ++.
gbjbaanb 13.12.2008 16:23:39

Я думаю, что существует своего рода элитарность BS, которая возникает, когда люди говорят о XNA или Java-игровых фреймворках, Pygame или чем-то еще. Да, профессиональные игровые дома будут использовать C ++ очень долго. Но Atmospherian спрашивает о чем-то для его собственного проекта, поэтому я собираюсь предположить, что он любитель (если бы он был генеральным директором Epic или что-то еще, я сомневаюсь, что он будет публиковать на SO)

В любом случае, то, что вы не можете кодировать FarCry, не означает, что это бесполезный фреймворк. Игры уровня студийного уровня требуют миллионов долларов и десятков людей, но XNA / Java / pygame / etc позволили любителям делать довольно удивительные вещи. Любительские игры и игры для крупных студий - два разных зверя и требуют двух разных наборов инструментов.

Чтобы ответить на ваши вопросы, атмосферный:

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

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

-Если вы хотите получить работу в игровой индустрии, вам необходимо изучить C ++.

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

5
10.12.2008 14:39:23

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

3
10.12.2008 14:44:43

Просто добавьте к разговору ... C # / .NET, безусловно, доступен на других платформах, не принадлежащих Microsoft.

Между этими двумя вы можете выбрать Linux, Mac, Wii ... Я уверен, что если было достаточно финансирования / интереса, они могут заставить Mono работать на PS3. На этом этапе вы сможете писать для всех основных игровых платформ, используя C # (хотя, вероятно, не с XNA per se).

Кроме того, для всех, кто интересуется производительностью ... в работе много чего интересного, например, новая поддержка Mono для быстрой математики с плавающей запятой с использованием их расширений SIMD (x86, конечно, только сейчас): http://tirania.org /blog/archive/2008/Nov-03.html

5
10.12.2008 18:05:47

В продолжение этого вопроса я начал смотреть на некоторые 3D движки на основе OpenGL, написанные на C ++ (CrystalSpace, Irrlicht, Panda3D), и все они выглядят довольно солидно. Интересное замечание о Panda3D заключается в том, что он написан на C ++, но основной способ его использования - через Python. Мне кажется, что метод дал бы лучшее из обоих миров, поскольку быстрый движок, написанный на C ++, сочетался с простотой программирования на Python. Я задам другой вопрос, сравнивая эти двигатели. Спасибо за ответы.

3
13.12.2008 15:07:10

Я думаю, что C ++ выйдет из моды в следующие 10 лет точно так же, как и сборка. Я профессиональный программист игр больше 15 лет. В начале 90-х многие говорили, что C недостаточно эффективен для игр. В конце 90-х те же люди говорили, что с C все в порядке, но C ++ слишком медленный для критически важных приложений, таких как игры. Сейчас C ++ является стандартным высокопроизводительным языком, и люди утверждают, что другие языки будут слишком медленными. В то же время в современных играх для логики игры используются такие языки сценариев, как Lua, Python или Unrealscript, которые в десять раз медленнее, чем C # или Java.

C ++ намного быстрее, когда вы занимаетесь математикой в ​​своей игре. Делать линейную алгебру мучительно медленно в C # или Java. Однако это только часть (10 - 25%) игры. Когда речь заходит об игровой логике, узким местом является доступ к памяти, поэтому использование другого языка существенно не снижает производительность. Инструментальная часть игры, которая составляет 50-80% кода, на самом деле не требует никакого C ++. Он успешно работает в C #, что достаточно быстро почти для любого инструмента.

Также не следует забывать, что C ++ является производным от C, который сделан в начале 70-х годов. Так что C ++ устарел во многих отношениях. Самым раздражающим, вероятно, является препроцессор, который убивает прозрачность и приводит к безумно долгому времени компиляции. Средний современный игровой движок C ++ компилируется за 30-60 минут. За это время вы можете скомпилировать каждый проект на C # и Java, когда-либо созданный людьми. Недостаток саморефлексии и динамического создания кода также является недостатком. Часто для преодоления этих недостатков требуется много времени на разработку.

Тем не менее, разработка C ++ стоит дорого, и игровой студии придется рискнуть провалом, перейдя на новую технологию, которая еще не доказана в разработке игр. Также важным фактором является то, что большинство опытных игровых программистов используют только C / C ++, и у них нет опыта работы с другими языками, что определенно увеличит риск переключения. Из-за этого вы, вероятно, не увидите, что игровые студии в ближайшие пару лет перейдут на C #. Тем не менее, вполне вероятно, что принадлежащая Microsoft студия в ближайшие 5 лет получит большой успех с игрой на C #, что убедит другие студии, что выполнимо сделать AAA-названия на C #, и тогда вы увидите, что все больше и больше студий переходят на C #.

На данный момент мой совет: если вы хотите создать многоплатформенный титул AAA, у вас нет другого выбора, кроме C ++, для части игры во время выполнения. Подумайте об использовании C # для стороны инструмента. Немного сложно эффективно соединить управляемый и неуправляемый код, но в долгосрочной перспективе это стоит потраченных на него усилий. Если вы делаете хобби-проект или титул B, где производительность менее важна, чем затраты / время на разработку, то забудьте C ++ и просто используйте C # для всего и потратьте дополнительное время на оптимизацию математики.

67
20.12.2009 22:48:26
Хорошее понимание / эссе. Игры теперь используют комбинацию языков: C ++ для основных математических задач и другие языки сценариев для игровой логики. Хотя я должен не согласиться с тем, что C ++ является старым языком, он постоянно обновляется и совершенствуется, просто ощущение, что он старый, не более того.
Daemin 4.01.2009 01:23:03
Многие времена компиляции C ++ являются шаблонными. Тем не менее, вы правы, препроцессор, безусловно, не помогает.
user7116 15.02.2009 19:08:52
Я думаю, что будущее C ++ в играх будет во многом зависеть от того, как C ++ 0x будет принят в индустрии.
Jasper Bekkers 10.12.2009 13:51:11

Как упоминалось в статье, XNA в настоящее время ограничена платформами Microsoft, но вы все равно можете использовать C #, .NET и любые языки программирования .NET для разработки игр кросс-платформенным способом.

Среда исполнения Mono предоставляет кроссплатформенный движок, который можно использовать для запуска вашего C # (или кода .NET) на различных настольных платформах (Windows, MacOS, Linux), а также на игровых консолях (Wii, поддерживаемая Novell, ожидается PS3). скоро и Xbox360 "по своему усмотрению").

Существует также коммерческая игровая платформа под названием Unity3D, которая творила чудеса, используя Mono. Это игровая среда разработки, которая превосходит XNA как среду разработки игр: физика, графика, освещение, модели, столкновения обрабатываются в собственном коде C ++, а вся игровая логика (AI, управление камерой, представления и т. Д.) Обрабатывается Управляемый код, написанный обычно на C # или UnityScript (строго типизированная реализация Javascript, которая дает вам лучшее из обоих миров: синтаксис Javascript, но сильные типы, которые повышают производительность).

10
2.01.2009 07:43:45
Также есть бесплатная версия Unity3D для независимых разработчиков: unity3d.com/unity/download .
user93202 10.12.2009 13:59:55

Lua должен вас заинтересовать, так как вы можете встроить его в C # и получить доступ к своим объектам из LuaScript.

-1
15.02.2009 19:43:20

Я не разработчик игр (если не считать игры Reversi, которую я написал на ассемблере Atari 6502 в ~ 1982 г.), но у меня есть большой опыт написания коммерческого прикладного программного обеспечения на ассемблере -> C -> Objective-C (кто-нибудь помнит Следующий куб?) -> C ++ -> Java и теперь C #.

Я не могу сравнить игровые библиотеки, но у меня есть некоторые мысли о C ++ и C #.

IMO, аргумент для C ++ по сравнению с C # из-за производительности не так прост, как некоторые могли бы поверить. Программное обеспечение, над которым я работаю, критично для производительности. Мы конкурируем с продуктами, скомпилированными для собственного кода (предположительно написанными на C / C ++ / Assembly), и мы выигрываем в производительности до такой степени, что наши конкуренты даже используют наше программное обеспечение для своих приложений в определенных приложениях .

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

Теперь иногда мне приходится признать, что у меня возникает соблазн переписать ядро ​​моего приложения на C ++, потому что я знаю, что смогу заставить его работать быстрее и использовать меньше памяти. До сих пор я сопротивлялся этому убеждению, потому что считаю, что падение производительности означало бы, что это всего лишь вопрос времени, когда моя кодовая база C ++ будет медленнее, чем я был бы, если бы остался с C #.

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

Если бы я только начинал в разработке игр сегодня, я бы определенно сделал ставку на Silverlight и / или WPF. WPF построен на Direct3D. Microsoft уже объявила, что Silverlight 3 будет поддерживать аппаратную 3D-рендеринг. Silverlight работает на различных браузерах и Mac. С Moonlight он работает на Linux. Это было объявлено для некоторых телефонных платформ. Благодаря тому факту, что Silverlight по сути является облегченной версией WPF (изначально она была представлена ​​как «WPF / E», где «E» означает «Везде»), вы можете использовать обе цели без особых дополнительных усилий. Вы можете получить облегченную (бесплатную или поддерживаемую рекламой) версию своей игры, используя Silverlight в браузере, и реальную сделку для серьезных геймеров, использующих WPF и работающих в Windows.

А еще лучше, если вы создадите отличную игровую библиотеку, которая позволяет легко ориентироваться как на WPF, так и на Silverlight 3 (или на Silverlight 2, если вам не требуется аппаратный 3D-рендеринг).

Хотя я не видел официального объявления, трудно поверить, что следующее поколение XBox не будет поддерживать Silverlight. Конечно, я бы не стал искать его в игровых системах Sony или Nintendo.

10
15.02.2009 20:45:35