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?
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:
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.)
sumber
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.
sumber