Чи хороша XNA для професійного розвитку для Xbox 360?


16

Я хочу почати розробку для свого Xbox 360, і я чув про рамку XNA, яка може орієнтуватися як на ПК, так і на Xbox. Це звучить як привабливий варіант, оскільки мої клієнти також можуть використовувати гру / додаток на звичайних комп’ютерах.

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

Чи можна орієнтуватися на Xbox за допомогою C # та без XNA? Які переваги?

Програмування на низькому рівні буде в C ++ безпосередньо працювати з DirectX. Які переваги?

Відповіді:


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 indie game
dotminic

Є лише 3 ядра, і ми маємо доступ до всіх них. Ви не отримуєте доступу до 2-х потоків. Один з цих потоків призначений для XNA, інший - нитка, до якої ніхто не отримує доступу під час ігор, як це стосується ОС XBOX.
Ольховський

1
Крім того, ви не лінуєтесь з розподілом пам'яті. За винятком дуже простих ігор, вам потрібно об’єднати всі об'єкти (що передбачає модель виділення / вільного типу - не краща за C ++), щоб запобігти дорогому збиранню сміття в .NET компактному CLR, який використовує підхід до збирання поколінь.
Ольховський

12

Якщо ви не готові заплатити 10 000 доларів за XBOX або Playstation devkit, то єдиною консоллю, яку ви можете розробити, є 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 компактний CLR .NET використовує підбір і сміття до збирання сміття, а типовий підхід до запобігання заїкання у вашій грі завдяки колекціям - взагалі уникати колекцій. Для цього потрібно використовувати об'єктивні пули для своїх класів та використовувати структури для менших об'єктів, де ви зазвичай використовуєте класи в середовищі Windows. Об'єднання об'єднання, як правило, вимагає розподілити / безкоштовно модель управління об'єктом, яка не гірше (а може бути і трохи краще), ніж управління пам'яттю C ++.

Однак, розробка в C # / XNA все ще в багато разів швидша і простіша, ніж розробка в C ++ без DirectX API (що є XNA).

Ось статус гри, яку я роблю в XNA, після 4 тижнів роботи:

Скріншот гри через 4 тижні розробки.

Це повинно дати вам уявлення про те, як неймовірно швидкий розвиток із бібліотекою / API XNA поєднується з C #.

Цей скріншот виведений XBOX приблизно в 65 кадрів в секунду.

Якщо ви хобі-розробник ігор і хочете зробити ігри для консолі, не тільки XNA + XBOX - ваш єдиний реалістичний варіант, це ще й досить дивовижний варіант, цікаве середовище для розробки та багато ігор XBOX Live Arcade. зроблено з XNA, і заробляв це сотні тисяч доларів. ( Лімбо, наприклад.)


1
Один із найяскравіших відповідей, які я мав щодо XNA dev. Дякую.
keyle

4

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

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

І пам’ятайте, що Xbox - це закрита система. Забудьте про будь-яку пряму взаємодію TCP / IP, ви можете спілкуватися лише з іншими консолями, присутніми в Xbox Live! мережу, і ви не можете робити необроблені HTTP-з'єднання.

Отже, якщо ви думаєте про гру, спробуйте XNA спробувати і перейдіть до девкіту, якщо вам потрібно більше сировини (і у вас є гроші). Якщо ви думаєте про додаток, просто орієнтуйтеся на іншу платформу.


Цікаво, чим відрізняються XNA та девкіти ...
Spooks

XNA - це API високого рівня. Devkit - це спеціальна консоль, де можна розгорнути ігри, написані на C ++ та DirectX, тим самим маючи доступ нижчого рівня та загальну кращу ефективність.
r2d2rigo

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