Почему Microsoft не разрабатывает подобный Ореолу заголовок следующего поколения с помощью C#? [закрытый]

Привет, если я понимаю, что вы хотите, чтобы этот запрос работал:

select *,
    Case when schedule_at is not NULL THEN (CASE 
        when actual_start < schedule_at THEN 'Early'
        else 'Late'
        END) 
    ELSE
        (case 
            when actual_start between schedule_from and schedule_to THEN 'On Time'
            when datediff(minute,actual_start,schedule_from) < 0 THEN 'Late'
            else 'Early'
            END) END as Delivery
from some_dates_table
14
задан jordanhill123 25 September 2014 в 23:51
поделиться

6 ответов

Во-первых, XNA не подходит. Это сделано с целью абстрагироваться от различий между ПК и 360. Высокопроизводительная игра не может этого сделать. Он должен использовать различия. Там, где сияет 360, нужно использовать производительность. Там, где это отстой, необходимо разработать обходные пути. И наоборот, для ПК.

Вот почему существуют другие оболочки DirectX (SlimDX приходит на ум как гораздо более прямая оболочка D3D).

Что касается управляемого кода в целом, на ум приходят несколько проблем:

  • У них уже есть большая кодовая база, которую они хотели бы использовать и дальше. Способ сократить время разработки - это , а не , чтобы выбросить все в окно и начать с нуля на другом языке.
  • Большинство игровых студий все еще имеют некоторую автономию, даже если они принадлежат Microsoft , Если они предпочитают писать свою игру на C ++, может ли Microsoft отменить это? Будет ли это хорошей идеей? Это, безусловно, разозлит разработчиков, а разозлить разработчиков обычно не очень хорошо.
  • Производительность: Да, C # и .NET очень хорошо работают на ПК, но на консолях это совсем другая история. Он использует .NET CF, который, помимо прочего, имеет ужасно примитивный сборщик мусора. Его JIT-компилятор откровенно отстой. .NETCF не предназначен для того, чтобы превзойти хорошо настроенный собственный код.
  • Контроль: Обычно вы пишете игры для консолей AAA, используя все, что консоль может предложить. Следует более или менее учитывать каждый байт памяти, каждый используемый цикл ЦП. Управляемый код просто менее предсказуем. Когда запускается GC? Сколько памяти используется в любой момент времени? Мы не знаем. Консоли имеют очень ограниченный объем памяти. (У 360 есть 512 МБ iirc. Это немного для современной игры, и сделать такие игры, как Halo 3, можно, только если вы точно знаете , кто сколько использует эту память).
  • Большинство функций на 360 просто не доступны .NET. Для использования многих аппаратных функций требуется либо взаимодействие C ++, либо ассемблер.

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

Но в конечном итоге, зачем им это делать? Это было бы большим риском, потребовалось бы много переписывать код, а что именно они пытаются доказать? Большинство студий делают кроссплатформенные игры, и для них .NET - не вариант, каким бы крутым он ни был. Они хотят иметь возможность запускать свой код и на PS3, или на Wii, или…

20
ответ дан 1 December 2019 в 05:58
поделиться

Вам нужно задать немного другой вопрос.

Почему Microsoft не переписывает существующие хорошо настроенные игровые движки на совершенно другом языке.

Надеюсь, это более понятный вопрос.

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

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

26
ответ дан 1 December 2019 в 05:58
поделиться

У Microsoft есть подобная платформа, называемая XNA , которую они разрабатывали последние три года. Существует ряд подтверждений концепции, стартовые наборы и другие ресурсы для разработчиков-любителей и студий AAA.

XNA позволяет всем разработчикам использовать свои существующие навыки C # и возможности Xbox 360 / Windows для создания игр для любая / обе платформы. Сами они еще не разработали коммерческую игру, использующую платформу, но уже было несколько довольно крутых проектов с использованием XNA.

Взгляните на некоторые из игр, которые были созданы с использованием XNA.

Кроме того, комментарии о производительности C # могут быть интересны в обсуждении на форуме по теме. Это определенно достаточно быстро для многих игр; на самом деле,

5
ответ дан 1 December 2019 в 05:58
поделиться

Quite simply, for real-time-like performance problems such as is presented by First Person Shooters, C# isn't up for the task. Not that it's not a good language, I use it and like working with it, but the fact is that the indeterminacy introduced by the Garbage Collection in C# makes it inappropriate for games which have high performance requirements. The same would be true of Java. Only when you get to a point where you have a certain amount of excess performance available can you really do something like this; the problem really is that somebody else is going to take that extra performance, and instead of sinking it into the runtime requirements of C# (or Java, which would have similar issues), they will just make a better-looking game. Since the consumer doesn't really care what technology the game was developed with, they'll usually go with the better-looking game, which puts any games developed with C# (or Java, like I said) at a significant disadvantage.

5
ответ дан 1 December 2019 в 05:58
поделиться

На самом деле, если вы посмотрите на то, как обстоят дела, MS не так сильно вовлечена в игровые студии. Bungie теперь является полунезависимой организацией, они закрыли Ensemble (Age of Empires, Halo Wars) по неизвестной причине ... они закрыли группу Flight Simulator, они позволили своей эксклюзивности с Bioware (Dragon Age, Baldurs Gate, NWN ) и Bizarre (Project Gotham Racing) уходят, и они закрывают FASA Interactive (Shadowrun). На данный момент, что у них действительно есть в доме? Все, о чем я могу думать, это .... Rare и Lionhead.

Относительно того, почему они не сделали названия AAA на C #. Я полагаю, что большая часть этого была связана с устаревшими проблемами. PGR, Forza, Age of Empires, Halo, Flight Sim, практически каждая игра, которую они создавали, была итерацией предыдущей серии, так что уже были бы значительные инвестиции в существующую инфраструктуру.

Остались третьи стороны. Почему третьи стороны не используют C #? Это просто, его нет на Wii или PS3.

5
ответ дан 1 December 2019 в 05:58
поделиться

.NET framework в целом не предназначен для разработки игр. Целевая аудитория .NET - это , в первую очередь, бизнес-приложения (я знаю, что его можно использовать для гораздо большего, но на минутку повесьте резюме).

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

Платформа .NET не разрабатывалась с учетом такого контроля. .NET подходит для быстрого создания приложений в очень выразительной манере - не обязательно для управления мельчайшими деталями высокопроизводительного графического процессора.

1
ответ дан 1 December 2019 в 05:58
поделиться