У галузевих іграх я маю на увазі, як Quake, CoD тощо.
У галузевих іграх я маю на увазі, як Quake, CoD тощо.
Відповіді:
У певному сенсі 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 ++, принаймні до тих пір, поки хтось не винайде затримку пам'яті миттєвого доступу без затримки.
Вибір мови сильно залежить від платформи. Зараз здається, що навряд чи щось, окрім платформи Microsoft, вимагатиме .NET як реалізація.
Звичайна мудрість говорить про те, що невелика платформа повинна бути близькою до металу, щоб виконати її, але з іншого боку, керовані платформи безпечніші . Це, мабуть, причина Windows Phone 7 змушує вас використовувати .NET.
Звичайно, було б цікаво, якби новий Xbox потребував керованої платформи. Якщо апаратне забезпечення телефону може впоратися з цим (і це робить), я, безумовно, можу побачити їх, використовуючи його на повнорозмірній консолі. Це би трохи порушило екосистему консолі, оскільки важче було б писати крос-платформні ігри, не записуючи весь свій ігровий код на мові сценаріїв. Якщо це так, то C # не замінить C ++, але йтиме рука об руку.
Зараз ви можете використовувати Mono як сценарій заднього кінця (подібний до того, що робить Unity), але я б міг уявити, що більшість виробників двигунів хотіли б або прокатати свої власні, або використовувати щось більш компактне, як Lua або Python, ніж C #.
У будь-якому випадку, це все про правильний інструмент для правильної роботи. Ви дійсно повинні вивчити обидві мови в будь-якому випадку, оскільки C # полегшує виконання певних речей (розробка інструментів, можливо, розробка сервера тощо), і ви не можете використовувати нічого, крім C ++ в деяких випадках.
Це мало ймовірно. C ++ має перевагу того, що він низький, щоб розробники могли насправді вивернути найдрібніші деталі, щоб отримати найкращу ефективність.
З C # і .NET ви маєте збір сміття, що дуже корисно, але при роботі з платформами з обмеженою пам’яттю та ресурсами (портативні консолі та певною мірою домашні консолі) вам потрібно мати якомога більше контролю над пам’яттю, щоб найкраще використовувати ресурсів. Дозвіл керованих мов розподіляти та звільняти пам'ять для вас, швидше за все, спричинить вам багато проблем.
Швидкість також є проблемою (хоча, мабуть, і менше). З часом я впевнений, що керовані мови можуть бути зроблені порівняно з компіляторами C ++.
В цілому, на мій досвід, розробники ігор, як правило, керують виродками, коли мова йде про пам'ять, час процесора та ресурси (щоб вичавити максимальну продуктивність), саме тому C / C ++ - це в основному використовувані мови.
AFAIK .NET GC досі страждає від алгоритму зупинки світового стилю. Хоча це може бути доречно для широкого спектру застосувань - це неприйнятно для додатків у реальному часі, таких як ігри.
Насправді, дуже важко ефективно використовувати керовані мови для програм у режимі реального часу, поки у нас не будуть прориви в GC.
Ні. Залежно від .NET передбачає масштабні переписування для платформ без доступних фреймворків, як PS3, і недоліки в роботі можуть бути цілком прийнятними на ПК або для ігор Live Arcade, але більші ігри потребуватимуть кожного запису продуктивність зі своїх консолей, щоб працювати досить швидко. Більше того, у C ++ існує величезна кількість кодових баз, які ніхто не міг дозволити собі оновити, навіть якби цього хотів. C ++ є в ігровій індустрії, і він буде залишатися там надовго.
У часи, коли потужність комп’ютера дефіцитна, все, що потрібно програмувати на C або C ++, просто тому, що зібрані сміття мови відбирають пам'ять від програміста, і, таким чином, продуктивність може знизитися.
У наш час комп'ютери швидше, але, як каже Кнут, і, коротко кажучи, оптимізація може бути злом:
очевидно, що основні функціональні функції низького рівня потрібно оптимізувати, оскільки обчислення геометрії 3D, фізики, зіткнень, освітлення може швидко роздути найкращий доступний процесор. Ви можете легко сказати, що підвищення якості візуалізації на машині майже завжди значно вбиває продуктивність.
Зараз є інші функції, такі як ігрові стани, AI, звук, вхід, мережа, які все ще важливі в грі, але які навряд чи ніколи займуть стільки комп’ютерних ресурсів. Ці функції, в основному, не повинні бути оптимізовані. Це мета створення сценарію мови та мов, зібраних зі сміттям: вам не доведеться думати про свою узгодженість пам’яті та організацію програми, оскільки код, який ви будете писати цими мовами, якщо ви не кодуєте матеріали низького рівня, ніколи не буде вузьке місце.
Приклад з 2 випадками
обидва знаходяться на відстані 500 км.
В обох випадках чи важливо зробити процес завантаження / вивантаження швидшим, щоб зменшити весь час транспортування, знаючи, що ви CANT роблять човен чи вантажівку швидшими?
Відповідь: це мало значення з вантажівкою, але вже не з човном, тому що ви вже багато зробили, переміщаючи запас човна.
Я не знаю, чи розумієте ви цю метафору, але певним чином це може змусити вас уявити математичну проблему, яка важливіша, ніж розуміння відповіді.
Мови сценаріїв дозволяють робити ігри швидшими, якщо у вас вже є програмований двигун на C / C ++: 3D-движок вирішує проблеми низького рівня, тепер вам доведеться робити гру зі своїми сценаріями.
Але пам’ятайте: ви абсолютно ніколи не зможете замінити скомпільовану мову низького рівня, НАБІЛЬКО. Статистично набрані, складені мови є основою продуктивності, і ви НЕ МОЖЕТЕ їх виключати, будь то ядро, 3D-движок або драйвер графічної картки.
Але звичайно, якщо ваша гра графічно проста і не вимагає багато векторних обчислень, ви можете зосередитися на геймплеї та забути про оптимізацію, адже в цьому випадку вам ніколи не доведеться мати справу з оптимізацією, оскільки ваша машина справді швидка для того
За винятком випадків, якщо ви плануєте порту IR на DS. Але я зупинюсь на цьому.
Подивіться, я знаю, що це хитрість, але я не просто розщеплюю волоски. Я вважаю, що більшість програмістів насправді не складають цього разом. Мова сама по собі не має нічого спільного зі швидкістю / швидкістю запуску. Це компілятор / фреймворк. Ви можете краще сперечатися з gcc проти cl (компілятор microsoft до 2010 року) або msbuild (поточний компілятор c ++ на 2010 рік). З кожним випуском ці компілятори стають кращими, тому вам також доведеться порівнювати їх із попередніми самими версіями. Я дуже вражений .net, і він працює добре, але навіть якщо він був трохи краще, я не бачу його перебирати, одна з причин: мобільність.
Ігри AAA хочуть бути в Windows, Linux, Mac, XBox, PS3, Nintendo тощо.