Apakah XNA bagus untuk pengembangan profesional untuk Xbox 360?

16

Saya ingin memulai pengembangan untuk Xbox 360 saya, dan saya pernah mendengar tentang kerangka XNA yang dapat menargetkan PC dan Xbox. Ini terdengar seperti opsi yang menarik karena klien saya dapat menggunakan game / aplikasi di komputer biasa juga.

Namun saya sangat baru di dunia Xbox. Apakah XNA hanya untuk pengembangan hobi, dan apakah itu tidak disarankan untuk pengembangan aplikasi semi-profesional atau perusahaan? Apakah XNA tidak memiliki kapabilitas dari solusi yang dikembangkan C ++, atau justru mengurangi kinerja game / aplikasi yang berjalan di Xbox?

Apakah mungkin menargetkan Xbox menggunakan C #, dan tanpa XNA? Apa kelebihannya?

Pemrograman tingkat rendah akan berada di C ++ langsung bekerja dengan DirectX. Apa kelebihannya?

Robinicks
sumber

Jawaban:

15

Jawaban singkatnya: Ya .

XNA hanyalah alat. Ini cocok untuk semua kecuali game yang paling banyak menggunakan prosesor dan grafis. Jika Anda mempertimbangkan XNA untuk gim Xbox 360, berikut ini yang akan Anda lewatkan:

  • Akses ke unit SIMD / Vector untuk melakukan hal yang sangat, sangat matematika floating point CPU cepat
  • Kemampuan untuk menggunakan kode bahasa asli yang mungkin akan sedikit lebih cepat daripada C #
  • Kemampuan menjadi sedikit lebih malas dengan bagaimana Anda mengalokasikan memori
  • Game XBLIG hanya memiliki akses ke 4 dari 6 core (tapi kami masih mendapatkan semua 3 CPU, dan mereka juga bukan core penuh, jadi kami tidak kehilangan banyak) - tidak yakin apakah ini berlaku untuk non-XBLIG XNA permainan
  • Akses DirectX penuh untuk melakukan tipu daya grafis yang benar-benar tidak jelas

Mungkin ada lebih - ini di atas kepala saya.

(Spekulasi: jika Anda adalah pengembang profesional (seperti dalam: memiliki devkit), saya pikir Anda dapat menggunakan XNA dengan kode asli, sama dengan P / Invoke pada Windows. Terbaik dari kedua dunia. Anda harus bertanya kepada Microsoft. Lihat juga XDK .)

Intinya adalah bahwa game XNA hampir secepat game asli dan hampir bisa melakukannya sebanyak hal. Saya sarankan Anda menggunakannya kecuali Anda menemukan alasan kuat untuk tidak melakukannya.

Saya tidak tahu apakah ada DirectX yang dikelola untuk 360. Mungkin SlimDX adalah tempat yang baik untuk memulai.

Andrew Russell
sumber
1
Apa itu "XBLIG"?
Ricket
2
Game indie Xbox live
dotminic
Hanya ada 3 core, dan kami memiliki akses ke semuanya. Anda tidak mendapatkan akses ke 2 utas. Salah satu utas tersebut adalah untuk XNA, yang lainnya adalah utas yang tidak ada yang dapat mengaksesnya saat membuat gim, seperti halnya untuk XBOX OS.
Olhovsky
1
Anda juga tidak menjadi malas dengan alokasi memori. Kecuali untuk gim yang sangat sederhana, Anda harus menyatukan semua objek (yang melibatkan model tipe alokasi / gratis - tidak lebih baik dari C ++) untuk mencegah pengumpulan sampah yang mahal di. NET compact CLR, yang menggunakan pendekatan pengumpulan generasi.
Olhovsky
12

Kecuali jika Anda bersedia membayar $ 10.000 untuk XBOX atau Playstation devkit, maka satu-satunya konsol yang dapat Anda kembangkan adalah XBOX 360, dan satu-satunya cara Anda dapat melakukannya adalah dengan XNA.

Untuk pengembangan profesional, kecuali jika Anda benar-benar perlu mendapatkan 100% dari kekuatan pemrosesan XBOX (yang sebagian besar game, terutama game 2D tidak perlu), maka XNA menurut saya sebenarnya jauh lebih baik untuk pengembangan.

Beberapa kesalahan yang dilakukan penjawab lain:

XBOX hanya memiliki 3 core. Anda mendapatkan akses ke semuanya dengan XNA.

Masing-masing core memiliki hyperthreading dan dukungan untuk 2 hyperthread. Anda hanya mendapatkan akses ke 4/6 utas. Salah satu utas itu adalah untuk XNA. Yang lainnya adalah utas yang tidak dapat diakses pengembang game, karena digunakan oleh OS XBOX.

C # pada XBOX jauh lebih lambat dari C # pada Windows. XBOX menggunakan .NET compact CLR, yang sangat ringan dan tidak memiliki banyak optmisasi desktop CLR. Fitur keamanan XBOX mencegah program dari memodifikasi kode sumber mereka sendiri. Ini membuatnya sangat sulit untuk bahkan memungkinkan kode .NET untuk berjalan, apalagi untuk berjalan cepat . Bagian dari apa yang membuat kode terkelola kompetitif dalam kinerja dengan kode asli C ++, adalah bahwa CLR dapat memodifikasi kode sendiri untuk mengoptimalkan koherensi cache. Tim pengembang XNA harus melompati beberapa simpai yang cukup besar hanya untuk membuat C # berjalan di XBOX sama sekali, dan ada biaya kinerja yang terkait dengan simpai ini.

Anda tidak boleh terlalu malas dengan alokasi memori. XNA pada Windows sangat menyederhanakan alokasi memori, seperti yang Anda harapkan dari lingkungan yang dikelola. Namun, di XBOX, .NET compact CLR menggunakan pendekatan sweep & compact untuk pengumpulan sampah, dan pendekatan khas untuk mencegah kegagapan dalam gim Anda karena koleksi, adalah untuk menghindari koleksi sekaligus. Ini membutuhkan penggunaan kumpulan objek untuk kelas Anda, dan menggunakan struct untuk objek yang lebih kecil, tempat Anda biasanya menggunakan kelas di lingkungan Windows. Pengumpulan objek umumnya membutuhkan model alokasi / bebas dari manajemen objek, yang tidak lebih buruk (dan mungkin sedikit lebih baik) daripada manajemen memori C ++.

Yang mengatakan, pengembangan di C # / XNA masih banyak kali lebih cepat dan lebih mudah daripada pengembangan di C ++ tanpa DirectX API (yang XNA adalah).

Berikut status permainan yang saya buat di XNA, setelah 4 minggu bekerja:

Cuplikan layar game setelah 4 minggu pengembangan.

Itu seharusnya memberi Anda gambaran betapa cepatnya perkembangan dengan perpustakaan / API XNA dikombinasikan dengan C #.

Tangkapan layar itu dibuat oleh XBOX di sekitar 65FPS.

Jika Anda seorang pengembang game penghobi, dan Anda ingin membuat game untuk konsol, tidak hanya XNA + XBOX satu-satunya pilihan realisitic Anda, itu juga merupakan opsi yang cukup menakjubkan, lingkungan pengembangan yang menyenangkan, dan banyak game XBOX Live Arcade telah dibuat dengan XNA, dan menghasilkan ratusan ribu dolar melakukannya. ( Limbo misalnya.)

Olhovsky
sumber
1
Salah satu jawaban paling jelas yang saya miliki tentang XNA dev. Terima kasih.
keyle
4

XNA adalah bilah bermata dua; itu relatif mudah digunakan, tetapi sangat dapat dikembangkan dan disesuaikan. Masalahnya adalah, didasarkan pada bahasa yang dikelola dan memiliki implementasi Compact Framework yang begitu-begitu, memeras beberapa kinerja dari permainan yang kompleks bisa sangat menyakitkan dan membuat frustrasi.

Anda hanya dapat menggunakan Xbox Anda melalui C # / XNA, atau melalui C ++ / DirectX, tetapi opsi kedua membutuhkan kualifikasi untuk lisensi XBLA dan membayar devkit, yang bisa sangat mahal (~ $ 10.000).

Dan ingat bahwa Xbox adalah sistem tertutup. Lupakan interaksi TCP / IP langsung, Anda hanya dapat berkomunikasi dengan konsol lain yang ada di Xbox Live! jaringan, dan Anda tidak dapat melakukan koneksi HTTP mentah.

Jadi, jika Anda memikirkan sebuah game, cobalah XNA dan pindah ke devkit jika Anda membutuhkan lebih banyak kekuatan mentah (dan Anda punya uang). Jika Anda memikirkan sebuah aplikasi ... hanya target untuk platform lain.

r2d2rigo
sumber
Saya ingin tahu seberapa berbedanya XNA dan devkit itu ...
Spooks
XNA adalah API C # tingkat tinggi. Devkit adalah konsol khusus tempat Anda dapat menggunakan game yang ditulis dengan C ++ dan DirectX, sehingga memiliki akses tingkat yang lebih rendah dan kinerja yang lebih baik secara keseluruhan.
r2d2rigo
jadi .. sama sekali berbeda
Spooks