XNA хорош для профессионального развития для Xbox 360?

16

Я хочу начать разработку для своего Xbox 360, и я слышал о платформе XNA, которая может быть ориентирована как на ПК, так и на Xbox. Это звучит как привлекательный вариант, так как мои клиенты могут использовать игру / приложение на обычных компьютерах.

Однако я очень новичок в сцене Xbox. XNA предназначен только для любителей и не рекомендуется для полупрофессиональных или корпоративных приложений? У XNA нет возможностей разработанного на C ++ решения или оно сильно снижает производительность игры / приложения, работающего на Xbox?

Можно ли нацелить Xbox с помощью C # и без XNA? Каковы преимущества?

Низкоуровневое программирование будет на C ++ напрямую работать с DirectX. Каковы преимущества?

Robinicks
источник

Ответы:

15

Краткий ответ: да .

XNA это просто инструмент. Он подходит для всех игр, кроме самых ресурсоемких и графически насыщенных. Если вы рассматриваете XNA для игры для Xbox 360, вот что вы пропустите:

  • Доступ к блоку SIMD / Vector для действительно очень быстрой математики с плавающей запятой процессора
  • Возможность использовать код на родном языке, который, вероятно, будет немного быстрее, чем C #
  • Возможность быть немного немного ленивее с тем, как вы выделяете память
  • Игры XBLIG имеют доступ только к 4 из 6 ядер (но мы по-прежнему получаем все 3 процессора, и они также не являются полными ядрами, поэтому мы не пропускаем много) - не уверен, применимо ли это к не-XBLIG XNA игры
  • Полный доступ к DirectX для выполнения действительно непонятного графического обмана

Там может быть больше - это с моей головы.

(Предположения: если вы это профессиональный разработчик (например: есть DevKit), я думаю , что вы можете использовать XNA с машинным кодом, так же , как P / Invoke на Windows , Лучшее из обоих миров Вы должны спросить Microsoft... Смотрите также XDK .)

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

Я не знаю, есть ли какой-нибудь управляемый DirectX для 360. Возможно, SlimDX - хорошее место для начала.

Эндрю Рассел
источник
1
Что такое "XBLIG"?
Ricket
2
Инди-игра для Xbox Live
dotminic,
Есть только 3 ядра, и у нас есть доступ ко всем из них. Вы не получаете доступ к 2 темам. Один из этих потоков предназначен для XNA, другой - поток, к которому никто не получает доступ при создании игр, как это делается для ОС XBOX.
Ольховский
1
Также вы не ленитесь с распределением памяти. За исключением очень простых игр, вы должны объединить все объекты (которые включают модель типа выделения / освобождения - не лучше, чем C ++), чтобы предотвратить дорогостоящие сборки мусора в .NET compact CLR, в котором используется подход сбора поколений.
Ольховский
12

Если вы не готовы платить 10 000 долларов за устройство XBOX или Playstation, единственной консолью, для которой вы можете разработать, является XBOX 360, и единственный способ сделать это - с помощью XNA.

Что касается профессионального развития, если вам действительно не нужно получать 100% вычислительной мощности XBOX (что не нужно большинству игр, особенно 2D-игр), тогда XNA, на мой взгляд, на самом деле намного лучше для разработки.

Некоторые ошибки, которые сделали другие ответчики:

У XBOX всего 3 ядра. Вы получаете доступ ко всем из них с XNA.

Каждое ядро ​​имеет гиперпоточность и поддержку 2-х гиперпоточностей. Вы получаете доступ только к 4/6 темам. Одна из этих тем предназначена для XNA. Другой поток, к которому не имеют доступа разработчики игр, так как он используется ОС XBOX.

C # на XBOX намного медленнее, чем C # на Windows. XBOX использует компактную CLR .NET, которая очень легковесна и в которой отсутствуют многие варианты настольных CLR. Функции безопасности XBOX не позволяют программам изменять собственный исходный код. Это делает очень трудным даже запускать код .NET, а тем более - быстрый . Частично то, что делает управляемый код конкурентоспособным по производительности с собственным кодом C ++, заключается в том, что CLR может модифицировать свой собственный код для оптимизации когерентности кэша. Команда разработчиков XNA должна перепрыгнуть через несколько довольно больших циклов, чтобы вообще заставить C # работать на XBOX, и с этими циклами связано снижение производительности.

Вы не станете слишком ленивым с распределением памяти. XNA в Windows значительно упрощает распределение памяти, как и следовало ожидать от управляемой среды. Однако в XBOX в .NET compact CLR используется быстрый и компактный подход к сбору мусора, а типичным подходом к предотвращению заикания в вашей игре из-за коллекций является полное исключение коллекций. Это требует использования пулов объектов для ваших классов и использования структур для небольших объектов, где вы обычно используете классы в среде Windows. Как правило, для создания пула объектов требуется модель управления объектами с распределением / освобождением, что не хуже (и, возможно, немного лучше), чем управление памятью в C ++.

Тем не менее, разработка в C # / XNA все еще во много раз быстрее и проще, чем разработка в C ++ без DirectX API (что такое XNA).

Вот статус игры, которую я делаю в XNA, после 4 недель работы:

Скриншот игры после 4 недель разработки.

Это должно дать вам представление о том, насколько невероятно быстрая разработка с библиотекой / API XNA сочетается с C #.

Этот скриншот воспроизводится XBOX со скоростью около 65 кадров в секунду.

Если вы являетесь разработчиком игр для любителей и хотите делать игры для консоли, XNA + XBOX не только ваш единственный реалистичный вариант, это также довольно удивительный вариант, забавная среда разработки, и многие игры XBOX Live Arcade были сделанный с XNA, и сделал сотни тысяч долларов, делая это. ( Limbo например.)

Ольховский
источник
1
Один из самых ясных ответов, которые у меня были о XNA dev. Спасибо.
Keyle
4

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

Развертывание на Xbox возможно только через C # / XNA или C ++ / DirectX, но для второго варианта требуется наличие лицензии XBLA и оплата за devkit, что может быть очень дорого (~ 10000 $).

И помните, что Xbox является закрытой системой. Забудьте о прямом взаимодействии по TCP / IP, вы можете общаться только с другими консолями, присутствующими в Xbox Live! сеть, и вы не можете делать необработанные HTTP-соединения.

Итак, если вы думаете об игре, попробуйте XNA и перейдите к devkit, если вам нужно больше силы (и у вас есть деньги). Если вы думаете о приложении ... просто цель для другой платформы.

r2d2rigo
источник
Интересно, как отличаются XNA и devkit ...
Spooks
XNA - это высокоуровневый API C #. Devkit - это специальная консоль, на которой можно развертывать игры, написанные на C ++ и DirectX, что обеспечивает более низкий уровень доступа и общую производительность.
r2d2rigo
так что .. совсем по другому
Spooks