XNA, Xbox 360 için profesyonel gelişim için iyi midir?


16

Xbox 360'ım için geliştirmeye başlamak istiyorum ve hem PC'yi hem de Xbox'ı hedefleyebilen XNA çerçevesini duydum. Müşterilerim oyunu / uygulamayı normal bilgisayarlarda da kullanabildikleri için bu çekici bir seçenek gibi görünüyor.

Ancak Xbox sahnesinde çok yeniyim. XNA sadece hobi uzmanı geliştirme amaçlı mıdır ve yarı profesyonel veya kurumsal uygulama geliştirme için önerilmez mi? XNA, C ++ tarafından geliştirilen bir çözümün özelliklerinden yoksun mu veya bu, Xbox'ta çalışan bir oyunun / uygulamanın performansını kötü bir şekilde düşürüyor mu?

Xbox'ı C # kullanarak ve XNA olmadan hedeflemek mümkün mü? Avantajları nelerdir?

DirectX ile doğrudan çalışan düşük seviyeli programlama C ++ 'da olacaktır. Avantajları nelerdir?

Yanıtlar:


15

Kısa cevap: Evet .

XNA sadece bir araçtır. İşlemci ve grafik açısından yoğun oyunlar dışındaki herkes için uygundur. Bir Xbox 360 oyunu için XNA'yı düşünüyorsanız, şunları kaçırırsınız:

  • Gerçekten çok hızlı CPU kayan nokta matematiği yapmak için SIMD / Vektör birimine erişim
  • Muhtemelen C # 'dan biraz daha hızlı olacak yerel dil kodunu kullanabilme
  • Yetenek bir olmak biraz bellek tahsis nasıl bit lazier
  • XBLIG oyunları 6 çekirdekten sadece 4'üne erişebilir (ancak yine de 3 CPU'yu da alıyoruz ve tam çekirdek de değiller, bu yüzden çok fazla kaçırmıyoruz) - bunun XBLIG olmayan XNA için geçerli olup olmadığından emin değilim oyunlar
  • Gerçekten belirsiz grafik hile yapmak için tam DirectX erişimi

Daha fazlası olabilir - bu başımın üstünden.

Eğer varsa: (Spekülasyon olduğu gibi profesyonel bir geliştirici (a devkit var), ben düşünüyorum aynı Windows P / Invoke olarak yerli kod içeren XNA kullanabileceği iki dünyanın en iyi Sen Microsoft'a sormanız gerekirdi... Ayrıca bkz . XDK .)

Sonuç olarak, bir XNA oyunu neredeyse yerel bir oyun kadar hızlıdır ve neredeyse çok şey yapabilir. Zorlayıcı bir neden bulamadığınız sürece kullanmanızı öneririm.

360 için herhangi bir yönetilen DirectX olup olmadığını bilmiyorum. Belki SlimDX başlamak için iyi bir yerdir.


1
"XBLIG" nedir?
Ricket

2
Xbox Live indie oyunu
dotminic

Sadece 3 çekirdek var ve hepsine erişebiliyoruz. 2 konuya erişiminiz yok. Bu iş parçacıklarından biri XNA için, diğeri de XBOX OS için olduğu gibi oyun yaparken kimsenin erişemediği bir iş parçacığı.
Olhovsky

1
Ayrıca bellek ayırma ile tembel olmuyorsunuz. Çok basit oyunlar dışında, nesnel bir toplama yaklaşımı kullanan .NET kompakt CLR'de pahalı çöp toplamalarını önlemek için tüm nesneleri (ayırma / serbest tip modeli içeren - C ++ 'dan daha iyi değil) havuzlamak zorundasınız.
Olhovsky

12

Bir XBOX veya Playstation devkit için 10.000 dolar ödemek istemiyorsanız, geliştirebileceğiniz tek konsol XBOX 360'tır ve bunu yapabilmenin tek yolu XNA ile.

Profesyonel gelişim için, XBOX'un işlem gücünün% 100'ünü (özellikle çoğu 2D oyunların ihtiyaç duymadığı) elde etmeniz gerekmedikçe, bence XNA aslında geliştirme için çok daha iyidir.

Diğer cevaplayıcıların yaptığı bazı hatalar:

XBOX sadece 3 çekirdeğe sahiptir. XNA ile hepsine erişebilirsiniz.

Her çekirdeğin hiper iş parçacığı ve 2 hiper iş parçacığı desteği vardır. Yalnızca 4/6 konularına erişebilirsiniz. Bu ipliklerden biri XNA içindir. Diğeri, XBOX OS tarafından kullanıldığı için hiçbir oyun geliştiricisinin erişemediği bir iş parçacığıdır.

XBOX'taki C #, Windows'taki C # 'dan çok daha yavaştır. XBOX, çok hafif olan ve masaüstü CLR'nin birçok optimizasyonundan yoksun .NET kompakt CLR'yi kullanıyor. XBOX güvenlik özellikleri programların kendi kaynak kodlarını değiştirmesini önler. Bu, .NET kodunun çalışmasına izin vermeyi çok zorlaştırır, hızlı çalıştırmak için çok daha az . Yönetilen kodu C ++ yerel koduyla performans açısından rekabetçi kılan şeylerden biri, CLR'nin önbellek tutarlılığını optimize etmek için kendi kodunu değiştirebilmesidir. XNA geliştirici ekibi, C # 'ın XBOX üzerinde çalışmasını sağlamak için bazı oldukça büyük çemberlerden atlamak zorunda ve bu çemberlerle ilişkili bir performans maliyeti var.

Bellek tahsisi ile ÇOK tembel olmuyorsunuz. Windows'taki XNA, yönetilen bir ortamdan beklediğiniz gibi bellek ayırmayı büyük ölçüde basitleştirir. Bununla birlikte, XBOX'ta .NET kompakt CLR, çöp toplama için süpürme ve kompakt bir yaklaşım kullanır ve koleksiyonlar nedeniyle oyununuzda kekemeliği önlemeye yönelik tipik yaklaşım, koleksiyonları tamamen önlemektir. Bu, sınıflarınız için nesne havuzlarının ve normalde Windows ortamında sınıfları kullanacağınız daha küçük nesneler için yapıların kullanılmasını gerektirir. Nesne havuzlaması genellikle C ++ bellek yönetiminden daha kötü (ve belki biraz daha iyi) olmayan bir tahsis / serbest nesne yönetimi modeli gerektirir.

Bununla birlikte, C # / XNA'daki geliştirme, DirectX API'sı (XNA olan) olmadan C ++ 'daki geliştirmeden hala birçok kez daha hızlı ve daha kolaydır.

İşte 4 hafta çalıştıktan sonra XNA'da yaptığım oyunun durumu:

4 haftalık gelişimden sonra oyunun ekran görüntüsü.

Bu, XNA kütüphanesi / API ile inanılmaz derecede hızlı bir gelişimin C # ile kombinasyon halinde olduğunu hissetmelidir.

Bu ekran görüntüsü XBOX tarafından yaklaşık 65FPS'de görüntüleniyor.

Bir hobici oyun geliştiricisiyseniz ve bir konsol için oyun yapmak istiyorsanız, sadece tek gerçek seçenek olan XNA + XBOX değil, aynı zamanda oldukça şaşırtıcı bir seçenek, eğlenceli bir geliştirme ortamı ve birçok XBOX Live Arcade oyunu XNA ile yapılmış ve yüz binlerce dolar kazanmış. ( Örneğin Limbo .)


1
XNA dev ile ilgili sahip olduğum en açık cevaplardan biri. Teşekkür ederim.
keyle

4

XNA çift kenarlı bir bıçaktır; kullanımı nispeten kolaydır, ancak çok genişletilebilir ve özelleştirilebilir. Sorun, yönetilen bir dile dayanarak ve bu kadar Kompakt Çerçeve uygulamasına sahip olmak, karmaşık bir oyundan bazı performansları sıkmak çok acı verici ve sinir bozucu olabilir.

Xbox'ınıza yalnızca C # / XNA veya C ++ / DirectX aracılığıyla dağıtabilirsiniz, ancak ikinci seçenek XBLA lisansına hak kazanmayı ve devkit için ödeme yapmayı gerektirir, ki bu çok pahalı olabilir (~ 10000 $).

Xbox'ın kapalı bir sistem olduğunu unutmayın. Herhangi bir doğrudan TCP / IP etkileşimini unutun, yalnızca Xbox Live'da bulunan diğer konsollarla iletişim kurabilirsiniz! ve ham HTTP bağlantıları yapamazsınız.

Yani, bir oyun düşünüyorsanız, XNA'yı deneyin ve daha fazla ham güce ihtiyacınız varsa (ve paranız varsa) bir devkit'e geçin. Bir uygulama düşünüyorsanız ... sadece başka bir platform hedefleyin.


Acaba XNA ve devkit ne kadar farklı ...
Spooks

XNA yüksek seviyeli bir C # API'sıdır. Bir devkit, C ++ ve DirectX ile yazılmış oyunları dağıtabileceğiniz, böylece genel olarak daha düşük seviyeli bir erişime ve daha iyi bir performansa sahip olabileceğiniz özel bir konsoldur.
r2d2rigo

yani .. tamamen farklı
Spooks
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.