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?
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:
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ń ).
źródło
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ę.
źródło