Чи замінюється C ++ на C # в галузевих іграх?


23

У галузевих іграх я маю на увазі, як Quake, CoD тощо.


7
Було б корисно, якщо ви коротко пояснили, що дало вам ідею, оскільки, як мінімум, це дуже дивна ідея.
Конрад Рудольф

2
Зважаючи на те, що Quake робиться в C .. ;-)
Качка комуністів

Мені просто було цікаво це питання!
Джефф

2
Здається, що під "галузевими іграми" ви маєте на увазі те, що зазвичай називають "титулами AAA".
хаос

Відповіді:


53

У певному сенсі C ++ дійсно замінюється - не тільки на C #, але й за допомогою інших мов. Але якщо ви запитаєте, чи буде це замінено повністю - то відповідь, безумовно, ні .

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

Цей другий потенціал не вимагає сильних моментів C ++ (таких як повний контроль над деталями низького рівня), але страждає від його слабких сторін (наприклад, керованої помилками керування пам'яттю вручну). І в цій другій якості C ++ замінюється різними мовами сценаріїв. Дуже багато розробників використовують Lua; деякі використовують Python. Але якщо платформа CLI доступна у вигляді .NET або Mono, вона представляє чудового кандидата в хост сценаріїв. Ці платформи досить швидкі, надійні, пропонують широко відому мову (C #) та всебічну бібліотеку базових класів. Не будемо забувати інструменти: MS Visual studio та SharpDevelop / MonoDevelop можуть бути не найкращими IDE в світі, але вони досить хороші.

Однак, ігровий движок не збирається писати на C # (або Lua, або Python з цього приводу). Чому? Тому що вони просто недостатньо швидкі.

На відміну від багатьох поширених думок, найбільший хіт ефективності сьогодні пов'язаний із затримкою пам’яті . Це означає, що доступ до пам’яті є серйозною справою. І керовані мови не дозволяють користувачеві контролювати доступ до пам'яті - саме тому вони "керуються" в першу чергу. Отже, жодна керована мова не дозволить написати дійсно швидкий ігровий движок. Насправді всі великі "C #" двигуни, про які я можу придумати - XNA, MOGRE, Unity - базуються на нативному коді C ++; але дозвольте писати логіку гри в C #.

Підсумовуючи це : замість C ++ або інших мов буде використовуватися C #. Але він ніколи не замінить C ++, принаймні до тих пір, поки хтось не винайде затримку пам'яті миттєвого доступу без затримки.


16
+1 Visual Studio - це дуже хороша IDE. Навіть якщо це темна сторона ...
Майкл Коулман

1
Ба, в моєму досвіді і C # недостатньо швидкий для моделювання, але це не заважає людям намагатися.
BigSandwich

@Nevermind Що таке "Керовані мови"?
Куазі Ірфан

3
@iamcreasy У широкому розумінні під "керованими мовами" я маю на увазі мови, що працюють під віртуальною машиною, яка включає певну форму збору сміття та / або управління пам'яттю. Більш суворо, керовані мови - це мови, націлені на (деяку реалізацію) загальної мови виконання, але моя відповідь стосується не лише їх.
забудьте

На вашу думку, чи підпадають під цю категорію а-ля-Вала схеми ГК?
weberc2

6

Вибір мови сильно залежить від платформи. Зараз здається, що навряд чи щось, окрім платформи Microsoft, вимагатиме .NET як реалізація.

Звичайна мудрість говорить про те, що невелика платформа повинна бути близькою до металу, щоб виконати її, але з іншого боку, керовані платформи безпечніші . Це, мабуть, причина Windows Phone 7 змушує вас використовувати .NET.

Звичайно, було б цікаво, якби новий Xbox потребував керованої платформи. Якщо апаратне забезпечення телефону може впоратися з цим (і це робить), я, безумовно, можу побачити їх, використовуючи його на повнорозмірній консолі. Це би трохи порушило екосистему консолі, оскільки важче було б писати крос-платформні ігри, не записуючи весь свій ігровий код на мові сценаріїв. Якщо це так, то C # не замінить C ++, але йтиме рука об руку.

Зараз ви можете використовувати Mono як сценарій заднього кінця (подібний до того, що робить Unity), але я б міг уявити, що більшість виробників двигунів хотіли б або прокатати свої власні, або використовувати щось більш компактне, як Lua або Python, ніж C #.

У будь-якому випадку, це все про правильний інструмент для правильної роботи. Ви дійсно повинні вивчити обидві мови в будь-якому випадку, оскільки C # полегшує виконання певних речей (розробка інструментів, можливо, розробка сервера тощо), і ви не можете використовувати нічого, крім C ++ в деяких випадках.


На сьогоднішній день через 3 роки стан C # для розвитку ігор значно розвинувся. Моно-проект підхопив XNA Game Studio і ребрендізував його MonoGame. SharpDX, SlimDX і OpenTK - це дуже пристойні обгортки opengl / directx. Навіть кілька двигунів фізики в c # з'явилися. Mono / MonoGame дозволяє побудувати гру один раз і автоматично перенести її на Android, Linux, mac os, ios, xbox 360, ps3, ps4 та wii.
Райан Манн

3

Це мало ймовірно. C ++ має перевагу того, що він низький, щоб розробники могли насправді вивернути найдрібніші деталі, щоб отримати найкращу ефективність.

З C # і .NET ви маєте збір сміття, що дуже корисно, але при роботі з платформами з обмеженою пам’яттю та ресурсами (портативні консолі та певною мірою домашні консолі) вам потрібно мати якомога більше контролю над пам’яттю, щоб найкраще використовувати ресурсів. Дозвіл керованих мов розподіляти та звільняти пам'ять для вас, швидше за все, спричинить вам багато проблем.

Швидкість також є проблемою (хоча, мабуть, і менше). З часом я впевнений, що керовані мови можуть бути зроблені порівняно з компіляторами C ++.

В цілому, на мій досвід, розробники ігор, як правило, керують виродками, коли мова йде про пам'ять, час процесора та ресурси (щоб вичавити максимальну продуктивність), саме тому C / C ++ - це в основному використовувані мови.


2

AFAIK .NET GC досі страждає від алгоритму зупинки світового стилю. Хоча це може бути доречно для широкого спектру застосувань - це неприйнятно для додатків у реальному часі, таких як ігри.

Насправді, дуже важко ефективно використовувати керовані мови для програм у режимі реального часу, поки у нас не будуть прориви в GC.


1

Ні. Залежно від .NET передбачає масштабні переписування для платформ без доступних фреймворків, як PS3, і недоліки в роботі можуть бути цілком прийнятними на ПК або для ігор Live Arcade, але більші ігри потребуватимуть кожного запису продуктивність зі своїх консолей, щоб працювати досить швидко. Більше того, у C ++ існує величезна кількість кодових баз, які ніхто не міг дозволити собі оновити, навіть якби цього хотів. C ++ є в ігровій індустрії, і він буде залишатися там надовго.


Хоча інерція існує, коди C ++ самі по собі не такі старі - можливо, максимум 10 років. Майже весь код у них зазнав заміни за цей період - для 3D-прискорювачів, програмованих конвеєрів, керованої даними архітектури та підтримки сценаріїв. Якщо розробник AAA хотів зробити повну міграцію до C #, він, ймовірно, міг би досягти цього за мінімальну вартість протягом трьох ігор - спочатку використовувати його як інструмент та сценарій хоста, другий перемістити ігрові шари гри до нього та третій порт рендерінг використовувати керовану оболонку DX / GL.

1
У Mono є комерційне рішення .NET для PS3.
Ден Олсон

По-друге, якщо ви будуєте свою гру в c # проти моно або з моногамою (заміна xna), ви можете перенести її до вбудованих ps3 / ps4, wii, xbox 360, android, max os тощо,
Ryan Mann

0

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

У наш час комп'ютери швидше, але, як каже Кнут, і, коротко кажучи, оптимізація може бути злом:

  • очевидно, що основні функціональні функції низького рівня потрібно оптимізувати, оскільки обчислення геометрії 3D, фізики, зіткнень, освітлення може швидко роздути найкращий доступний процесор. Ви можете легко сказати, що підвищення якості візуалізації на машині майже завжди значно вбиває продуктивність.

  • Зараз є інші функції, такі як ігрові стани, AI, звук, вхід, мережа, які все ще важливі в грі, але які навряд чи ніколи займуть стільки комп’ютерних ресурсів. Ці функції, в основному, не повинні бути оптимізовані. Це мета створення сценарію мови та мов, зібраних зі сміттям: вам не доведеться думати про свою узгодженість пам’яті та організацію програми, оскільки код, який ви будете писати цими мовами, якщо ви не кодуєте матеріали низького рівня, ніколи не буде вузьке місце.

Приклад з 2 випадками

  • Відправте 500 кг меблів з вантажівкою.
  • Відправте 30 тонн матеріалу човником.

обидва знаходяться на відстані 500 км.

В обох випадках чи важливо зробити процес завантаження / вивантаження швидшим, щоб зменшити весь час транспортування, знаючи, що ви CANT роблять човен чи вантажівку швидшими?

Відповідь: це мало значення з вантажівкою, але вже не з човном, тому що ви вже багато зробили, переміщаючи запас човна.

Я не знаю, чи розумієте ви цю метафору, але певним чином це може змусити вас уявити математичну проблему, яка важливіша, ніж розуміння відповіді.

Мови сценаріїв дозволяють робити ігри швидшими, якщо у вас вже є програмований двигун на C / C ++: 3D-движок вирішує проблеми низького рівня, тепер вам доведеться робити гру зі своїми сценаріями.

Але пам’ятайте: ви абсолютно ніколи не зможете замінити скомпільовану мову низького рівня, НАБІЛЬКО. Статистично набрані, складені мови є основою продуктивності, і ви НЕ МОЖЕТЕ їх виключати, будь то ядро, 3D-движок або драйвер графічної картки.

Але звичайно, якщо ваша гра графічно проста і не вимагає багато векторних обчислень, ви можете зосередитися на геймплеї та забути про оптимізацію, адже в цьому випадку вам ніколи не доведеться мати справу з оптимізацією, оскільки ваша машина справді швидка для того

За винятком випадків, якщо ви плануєте порту IR на DS. Але я зупинюсь на цьому.


1
"Оптимізація може бути злом" - це, безумовно, найкорисніше мутований варіант його заяви, який я читав.

добре, я це пояснюю, тому я вважаю марним процитувати всю його заяву, що є досить довгим реченням і насправді не пояснено ... На додаток до цього ми говоримо про ігри, які не однакові більш широке програмне забезпечення, про яке хотів поговорити Кнут.
jokoon

Ви згадуєте, що введення навряд чи забирає багато комп'ютерних ресурсів. Я хотів би зазначити, що оскільки гравець стає більш фізично пов'язаний з грою, це стає менш правдивим. Наприклад, кінект. Це форма введення даних, але для використання потрібно багато обчислювальних ресурсів.
Ponkadoodle

0

Подивіться, я знаю, що це хитрість, але я не просто розщеплюю волоски. Я вважаю, що більшість програмістів насправді не складають цього разом. Мова сама по собі не має нічого спільного зі швидкістю / швидкістю запуску. Це компілятор / фреймворк. Ви можете краще сперечатися з gcc проти cl (компілятор microsoft до 2010 року) або msbuild (поточний компілятор c ++ на 2010 рік). З кожним випуском ці компілятори стають кращими, тому вам також доведеться порівнювати їх із попередніми самими версіями. Я дуже вражений .net, і він працює добре, але навіть якщо він був трохи краще, я не бачу його перебирати, одна з причин: мобільність.

Ігри AAA хочуть бути в Windows, Linux, Mac, XBox, PS3, Nintendo тощо.


Безумовно, реалізація компілятора відіграє певну роль, але різні мови надають різні можливості для оптимізації, керованої компілятором, і різні можливості для програмістів, щоб обійти звичайні мовні правила та безпосередньо поговорити з обладнанням. Мова і цілі самі по собі мають багато спільного з продуктивністю.

Мова може мати багато спільного зі швидкістю та швидкістю запуску, оскільки синтаксис та стандартні бібліотеки сприятимуть різним підходам. Наприклад, мова, де важко використовувати масиви суміжної пам’яті через те, що всі їх об’єкти, що є вказівниками, будуть прагнути кеш-пам'ять набагато більше, ніж мова, де можна ефективно використовувати масиви чи вектори.
Килотан

+1 дуже гарна точка, яку ти міг зробити, не ображаючи дурних людей, вони не знають, хто вони.
Вогнева ворона

За винятком того, на сьогодні ви можете побудувати проти монопорту та майже всього. Наприклад, це зараз дуже портативно.
Райан Манн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.