Setelah membaca kata-kata kasar ini , saya merasa mereka mungkin benar (mengingat Xenon dan CELL BE keduanya sangat sensitif terhadap kode yang bodoh dan cache ), tapi saya pernah mendengar bahwa orang-orang membuat game baik-baik saja dengan C # juga.
Jadi, apakah benar bahwa tidak mungkin melakukan sesuatu yang profesional dengan XNA, atau apakah posternya hilang apa yang menjadikan XNA API pembunuh untuk pengembangan game?
Secara profesional, saya tidak bermaksud dalam arti bahwa Anda dapat menghasilkan uang dari itu, tetapi lebih dalam arti bahwa game yang lebih profesional memiliki model phsyics dan sistem animasi yang tampak di luar jangkauan bahasa dengan hambatan yang pasti terhadap intrinsik . Jika saya ingin menulis sistem tabrakan atau mesin dinamika fluida untuk permainan saya, saya tidak merasa seperti C # menawarkan saya kesempatan untuk melakukan itu ketika generator kode runtime dan kurangnya intrinsik menghalangi kinerja.
Namun, banyak orang tampaknya baik-baik saja bekerja dalam batasan-batasan ini, membuat permainan yang sukses tetapi tampaknya menghindari masalah apa pun dengan kelalaian. Saya tidak melihat ada game XNA melakukan sesuatu yang kompleks selain apa yang sudah disediakan oleh perpustakaan, atau ditangani oleh shader. Apakah ini penghindaran dinamika permainan yang lebih kompleks karena keterbatasan C # , atau hanya orang yang berkonsentrasi untuk menyelesaikannya ?
Dalam semua kejujuran, saya tidak percaya bahwa perang AI dapat mempertahankan banyak unit AI tanpa pendekatan berorientasi data, atau beberapa hack C # kotor untuk membuatnya berjalan lebih baik daripada pendekatan standar, dan saya kira itu juga sebagian pertanyaan saya, bagaimana sudahkah orang meretas C # sehingga dapat melakukan apa yang dilakukan pembuat game secara alami dengan C ++?
Jawaban:
OK, hanya untuk menyodok beberapa lubang di kata-kata kasar yang Anda tautkan:
XNA di Xbox 360 berjalan pada versi modifikasi .NET Compact Framework CLR. Saya tidak ragu bahwa itu tidak memenuhi standar versi desktop. JITter mungkin tidak sebagus - tapi saya juga berpikir itu tidak buruk . Saya terkejut dia tidak menyebutkan pengumpul sampah yang mengerikan dibandingkan dengan desktop CLR.
(Tentu saja - Anda tidak harus memukul pengumpul sampah dalam permainan dikembangkan secara profesional pula , seperti yang Anda harus berhati-hati dengan alokasi di setiap pertandingan profesional kelas.)
(Untuk diskusi teknis aktual dari .NET Compact Framework, mungkin mulai dengan seri artikel ini: Gambaran Umum , Kompiler JIT , dan GC dan heap .)
Cara dia sepenuhnya tidak spesifik tentang terminologinya membuatnya bahkan sulit untuk memahami apa yang dia maksudkan. Entah dia dalam mode kata-kata kasar maksimal, atau tidak tahu apa yang dia bicarakan.
Sekarang kita punya yang keluar dari jalan, berikut adalah beberapa hal yang Anda lakukan kehilangan dengan menggunakan XNA pada 360, daripada pergi asli :
Perlu juga disebutkan bahwa ini hanya pembatasan sisi CPU. Anda masih mendapatkan akses gratis sepenuhnya berjalan pada GPU.
Saya menggambarkan hal-hal ini dalam jawaban untuk pertanyaan yang sama efektifnya dengan pertanyaan ini. Seperti yang saya sebutkan dalam jawaban itu XNA benar-benar cocok untuk pengembangan "profesional" .
Satu-satunya alasan yang akan Anda hindari adalah karena Anda tidak dapat menyewa bakat C #, melisensikan mesin C #, dan menggunakan kembali kode C # yang ada dengan cara yang sama dengan basis pengetahuan C ++ yang ada. Atau karena Anda mungkin juga menargetkan platform yang tidak mendukung C #.
Tentu saja, bagi banyak dari kita yang bukan pengembang "profesional", XNA adalah satu - satunya pilihan kita untuk menggunakan Xbox 360, menjadikannya poin yang diperdebatkan.
Untuk menjawab pertanyaan Anda yang lain:
Tidak ada dalam C # yang menghentikan Anda menggunakan pendekatan berorientasi data yang pada dasarnya sama persis dengan cara Anda menggunakannya dalam C ++.
C # tidak memiliki kemampuan untuk secara otomatis kode inline pada waktu kompilasi, dan (tanpa pergi untuk memeriksa) Saya cukup yakin JITter CLR kompak tidak dapat inline metode (desktop CLR bisa). Jadi untuk kode kritis kinerja Anda mungkin harus secara manual menyejajarkan dalam C #, di mana C ++ memberikan bantuan.
Mungkin alasan yang lebih besar mengapa Anda tidak sering melihat hal-hal intensif CPU-matematika seperti deteksi tabrakan dan simulasi cairan di C # adalah kurangnya akses ke unit vektor (seperti yang disebutkan di atas).
sumber
object
tipe. Dan dalam versi 1 (sebelum obat generik) Anda tidak bisa memasukkannya ke dalam wadah non-array tanpa meninju mereka. Tapi hari ini sangat mudah untuk menulis kode bebas kotak. Dan CLR Profiler memungkinkan Anda untuk mendeteksi tempat di mana Anda mungkin bertinju.Anda harus mendefinisikan 'profesional'. Bisakah Anda melakukan Angry Birds, Plants vs Zombies, dll? Benar. Bisakah Anda melakukan Crysis 2, COD, Halo? Aku meragukan itu. Menggunakan C # hanya benar-benar akan berdampak pada game yang sangat intensif CPU dan juga perlu memeras setiap byte terakhir dari memori (Anda kehilangan koleksi sampah), jadi ada banyak sekali yang masih bisa Anda lakukan.
Sebagai alat pembelajaran untuk orang-orang yang memulai, alat prototyping, platform untuk menulis permainan yang dapat mengatasi pertukaran, dll, ini fantastis dan memiliki banyak kekuatan dan kesederhanaan, itu tidak dirancang untuk membuat apa yang Anda inginkan sebut game 'AAA'. Ini juga menghilangkan banyak rasa sakit dan penderitaan yang orang harus khawatirkan dengan porting lintas platform dan kompatibilitas.
Jika Anda datang dengan permainan yang luar biasa dan Anda mengalami keterbatasan apa yang dapat Anda lakukan dengan XNA maka saya sarankan menghubungi MS secara langsung, jika idenya benar-benar cukup baik, mereka mungkin hanya akan membiarkan Anda mendapatkan pengembangan penuh. kit.
sumber
unsafe
kode sering lebih lambat daripada setara aman, karena mengurangi jumlah optimisasi yang bisa dibuat oleh CLR. Anda harus mengukurnya.Fakta sederhananya adalah Anda tidak perlu jumlah poligon tinggi, pencahayaan HDR penuh, atau fisika paling menarik di dunia untuk membuat gim yang menarik, dan jika rencana gim Anda tidak menyertakannya, maka mengapa tidak memilih yang lebih cepat solusi waktu pengembangan?
Itu salah. Permainan profesional memiliki apa yang mereka butuhkan untuk menerapkan permainan mereka dan mencapai tampilan artistik mereka, dan tidak lebih dan memang, tidak kurang. Sebuah permainan tidak lebih profesional karena terlihat lebih realistis atau memiliki fisika lebih rinci. Sebuah gim yang profesional menghasilkan gim dan sasaran visualnya, tepat waktu, sesuai anggaran, dll, dan dikirimkan serta menghasilkan keuntungan.
sumber