Чи хороша 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.