Czy XNA nadaje się do profesjonalnego rozwoju na Xbox 360?

16

Chcę zacząć tworzyć dla mojej konsoli Xbox 360 i słyszałem o frameworku XNA, który może być skierowany zarówno na komputer PC, jak i Xbox. To brzmi jak atrakcyjna opcja, ponieważ moi klienci mogą korzystać z gry / aplikacji również na normalnych komputerach.

Jestem jednak bardzo nowy na scenie Xbox. Czy XNA służy wyłącznie do tworzenia aplikacji hobbystycznych i czy nie jest zalecane do tworzenia aplikacji półprofesjonalnych lub korporacyjnych? Czy XNA nie ma możliwości rozwiązania opracowanego w C ++, czy może znacznie obniża wydajność gry / aplikacji działającej na Xbox?

Czy można celować na Xbox za pomocą C # i bez XNA? Jakie są zalety?

Programowanie niskiego poziomu byłoby w C ++ bezpośrednio współpracujące z DirectX. Jakie są zalety?

Robinicks
źródło

Odpowiedzi:

15

Krótka odpowiedź: tak .

XNA to tylko narzędzie. Jest odpowiedni dla wszystkich gier z wyjątkiem najbardziej wymagających procesorów i grafiki. Jeśli zastanawiasz się nad XNA do gry na konsolę Xbox 360, oto, czego przegapisz:

  • Dostęp do jednostki SIMD / Vector do wykonywania naprawdę, bardzo szybkich obliczeń zmiennoprzecinkowych procesora
  • Możliwość użycia kodu języka ojczystego, który prawdopodobnie będzie trochę szybszy niż C #
  • Możliwość być trochę nieco leniwi w jaki sposób alokować pamięć
  • Gry XBLIG mają dostęp tylko do 4 z 6 rdzeni (ale wciąż otrzymujemy wszystkie 3 procesory i nie są też pełnymi rdzeniami, więc nie tracimy wiele) - nie jestem pewien, czy dotyczy to XNA innych niż XBLIG Gry
  • Pełny dostęp do DirectX do robienia naprawdę niejasnych podstępów graficznych

Może być czegoś więcej - to jest poza moją głową.

(Rozmyślanie: jeśli jesteś profesjonalnym deweloperem (jak w: mają devkit), ja myślę , że można użyć XNA z natywnego kodu, tak samo jak P / Invoke na Windows Najlepsze z obu światów Trzeba by zapytać Microsoft... Zobacz także XDK .)

Najważniejsze jest to, że gra XNA jest prawie tak szybka jak gra natywna i może zrobić prawie tyle samo rzeczy. Sugeruję, abyś go używał, chyba że znajdziesz ważny powód, aby tego nie robić.

Nie wiem, czy istnieje jakiś zarządzany DirectX dla 360. Być może SlimDX jest dobrym miejscem do rozpoczęcia.

Andrew Russell
źródło
1
Co to jest „XBLIG”?
Ricket
2
Niezależna
Są tylko 3 rdzenie i mamy dostęp do wszystkich z nich. Nie masz dostępu do 2 wątków. Jeden z tych wątków dotyczy XNA, drugi to wątek, do którego nikt nie ma dostępu podczas tworzenia gier, tak jak w przypadku XBOX OS.
Olhovsky,
1
Ponadto nie musisz być leniwy przy przydzielaniu pamięci. Z wyjątkiem bardzo prostych gier, musisz połączyć wszystkie obiekty (co wiąże się z modelem alokacji / swobodnego typu - nie lepszym niż C ++), aby zapobiec kosztownym kolekcjom śmieci w kompaktowym środowisku CLR .NET, które wykorzystuje podejście kolekcjonowania generacyjnego.
Olhovsky,
12

Jeśli nie jesteś gotów zapłacić 10 000 $ za zestaw XBOX lub Playstation, jedyną konsolą, którą możesz opracować, jest XBOX 360, a jedynym sposobem na to jest XNA.

Do profesjonalnego rozwoju, chyba że naprawdę potrzebujesz 100% mocy obliczeniowej XBOX-a (którego większość gier, zwłaszcza gier 2D nie potrzebuje), to moim zdaniem XNA jest znacznie lepszy w rozwoju.

Niektóre błędy popełniane przez innych użytkowników:

XBOX ma tylko 3 rdzenie. Masz dostęp do wszystkich dzięki XNA.

Każdy rdzeń ma hyperthreading i obsługuje 2 hyperthreads. Masz dostęp tylko do wątków 4/6. Jeden z tych wątków dotyczy XNA. Drugi to wątek, do którego nie mają dostępu twórcy gier, ponieważ jest używany przez system operacyjny XBOX.

C # na XBOX jest znacznie wolniejszy niż C # w Windows. XBOX korzysta z .NET compact CLR, który jest bardzo lekki i nie ma wielu optmizacji pulpitu CLR. Funkcje bezpieczeństwa XBOX zapobiegają modyfikowaniu przez programy własnego kodu źródłowego. To sprawia, że ​​bardzo trudno jest nawet uruchomić kod .NET, a tym bardziej szybko . Częścią tego, co czyni kod zarządzany konkurencyjnym pod względem wydajności z rodzimym kodem C ++, jest to, że CLR może modyfikować swój własny kod, aby zoptymalizować spójność pamięci podręcznej. Zespół deweloperów XNA musi przeskoczyć przez całkiem duże obręcze, aby w ogóle uruchomić C # na XBOX, i wiąże się z tym koszt wydajności.

Przy przydzielaniu pamięci nie będziesz zbyt leniwy. XNA w systemie Windows znacznie upraszcza przydzielanie pamięci, jak można oczekiwać od środowiska zarządzanego. Jednak w XBOX kompaktowy CLR .NET stosuje szerokie i kompaktowe podejście do zbierania śmieci, a typowym podejściem do zapobiegania zacinaniu się w grze z powodu kolekcji jest całkowite uniknięcie kolekcji. Wymaga to użycia pul obiektów dla klas i struktur dla mniejszych obiektów, gdzie zwykle używasz klas w środowisku Windows. Pule obiektów na ogół wymagają modelu zarządzania przydziałami / wolnymi obiektami, który nie jest gorszy (a może trochę lepszy) niż zarządzanie pamięcią C ++.

To powiedziawszy, rozwój w C # / XNA jest wciąż wiele razy szybszy i łatwiejszy niż rozwój w C ++ bez DirectX API (którym jest XNA).

Oto stan gry, którą tworzę w XNA po 4 tygodniach pracy:

Zrzut ekranu gry po 4 tygodniach rozwoju.

To powinno dać ci wyobrażenie, jak niesamowicie szybki rozwój z biblioteką / API XNA jest połączony z C #.

Ten zrzut ekranu jest renderowany przez XBOX przy około 65 klatkach na sekundę.

Jeśli jesteś twórcą gier hobbystycznych i chcesz tworzyć gry na konsolę, XNA + XBOX to nie tylko Twoja jedyna realistyczna opcja, ale także niesamowita opcja, fajne środowisko programistyczne i wiele gier XBOX Live Arcade. wykonane za pomocą XNA i zarobiły na tym setki tysięcy dolarów. ( Na przykład otchłań ).

Olhovsky
źródło
1
Jedna z najjaśniejszych odpowiedzi na temat XNA dev. Dziękuję Ci.
keyle
4

XNA jest obosiecznym ostrzem; jest stosunkowo łatwy w użyciu, ale bardzo rozszerzalny i konfigurowalny. Problem polega na tym, że opierając się na zarządzanym języku i mając tak bardzo implementację Compact Framework, wyciskanie wydajności ze złożonej gry może być bardzo bolesne i frustrujące.

Możesz wdrożyć tylko na konsoli Xbox za pośrednictwem C # / XNA lub C ++ / DirectX, ale druga opcja wymaga zakwalifikowania się do licencji XBLA i zapłacenia za zestaw devkit, który może być bardzo drogi (~ 10000 $).

I pamiętaj, że Xbox jest systemem zamkniętym. Zapomnij o bezpośredniej interakcji TCP / IP, możesz komunikować się tylko z innymi konsolami obecnymi w Xbox Live! sieć i nie można wykonywać nieprzetworzonych połączeń HTTP.

Tak więc, jeśli myślisz o grze, wypróbuj XNA i przejdź do zestawu, jeśli potrzebujesz więcej surowej mocy (i masz pieniądze). Jeśli myślisz o aplikacji ... po prostu wybierz inną platformę.

r2d2rigo
źródło
Zastanawiam się, jak różne są XNA i devkit ...
Spooks
XNA jest API C # wysokiego poziomu. Devkit to specjalna konsola, w której możesz wdrażać gry napisane w C ++ i DirectX, dzięki czemu masz dostęp na niższym poziomie i ogólnie lepszą wydajność.
r2d2rigo
więc .. zupełnie inaczej
Spooks