Uruchom grę XNA bez grafiki

11

Zastanawiasz się, czy w ogóle można uruchomić grę XNA bez wyświetlania czegokolwiek.

Mam działającą grę, która działa w konfiguracji serwera klienta, w której jeden gracz jest gospodarzem, a inne osoby mogą połączyć się z jego grą.

Chcę teraz móc uruchomić grę jako host na decy towanym serwerze bez karty graficznej, w zasadzie nie chcę uruchamiać żadnej logiki Draw ().

Czy naprawdę muszę przejść przez całą grę i usunąć wszystkie odniesienia do XNA?

Jak ludzie to zrobili?

EDYCJA : Powodem, dla którego chcę to zrobić, jest to, że mam działającą konfigurację serwera klienta w grze i nie chcę tworzyć osobnego „bezgłowego” programu serwera.

JensB
źródło
Dlaczego nie można po prostu napisać kod w Drawpodobny if (headless) { return; }?
ashes999
1
@ asher999 Nie jestem pewien, czy to całkowicie usunie całą logikę rysowania i grafiki z gry. Serwer wirtualny może w ogóle nie mieć żadnej rzeczywistej karty graficznej.
JensB
Zmiana typu wyjścia lub pomijanie rysunku nie usunie magicznie zależności XNA od urządzenia graficznego. Jeśli ładujesz zawartość wymagającą urządzenia graficznego (zwłaszcza tekstur), istnieje bardzo duża szansa, że ​​nie załadują się one przy użyciu jednego z proponowanych rozwiązań.
dadoo Games

Odpowiedzi:

10

Wystarczy wykonać normalny projekt w języku C # i dołączyć pliki binarne XNA. Dzięki temu uzyskasz dostęp do typów danych XNA i metod ramowych. Moja gra to robi i działa bezbłędnie.

nieuprawny
źródło
1
Zgaduję, że napisałeś opakowanie, które działa jak XNA, wywołując potrzebne metody, takie jak Aktualizacja dla Ciebie? Spróbuję, dzięki.
JensB
2

Odpowiedź brzmi: nie rób tego. Jeśli nie musisz tworzyć gry - tj. nie chcesz skorzystać z oferty XNA, dlaczego to robisz? Naprawdę powinieneś zastanowić się nad stworzeniem niestandardowego oprogramowania, które może z powodzeniem symulować grę, w którą chcesz zagrać - zazwyczaj jakiś system konsoli. Jeśli podasz więcej szczegółów, zaktualizuję moją odpowiedź mniej ogólną odpowiedzią.

Vaughan Hilts
źródło
1
Mogę podać jeden powód: testy jednostkowe. Często chcesz przetestować fragment lub sekcję kodu bez konieczności ładowania lub rysowania i grafiki.
Stephen Tierney
3
@StephenTierney Mogę podać jeszcze jeden powód: nie próbuje, próbuje uruchomić serwer gier (na dedykowanym komputerze). Przeczytaj ponownie pytanie i rozważ wycofanie swojego komentarza.
Vaughan Hilts
1

Cóż, jeśli chcesz po prostu wyeliminować wywołania losowania, próbowałeś tego użyć: Pomiń losowanie

H3llrais3R
źródło
1

Aby skorzystać z sugestii bez tytułu, możesz po prostu dołączyć odwołania do bibliotek DLL i używać ich bez użycia domyślnych pętli gier. Przykłady tego można znaleźć w serii samouczków winforms w klubie twórców: http://xbox.create.msdn.com/en-us/education/catalog/sample/winforms_series_2

Ponadto, jeśli chcesz uzyskać jeszcze więcej fantazji, możesz zastąpić całą pętlę gry XNA własną, niestandardową i kontrolować cały proces. Aby uzyskać więcej informacji na temat tego spojrzenia na /programming/6361691/custom-xna-game-loop-in-windows

Hard Rock
źródło
1

Jeśli zmienisz typ wyjścia projektu XNA na „Aplikacja konsoli”, aplikacja po prostu otworzy pustą konsolę podczas uruchamiania, nigdy nie otwierając okna rzeczywistej gry. Może to być przydatne do tego, co próbujesz osiągnąć, ponieważ chcesz wykonywać testy i bardzo łatwo możesz użyć konsoli jako okna debugowania.

UBSophung
źródło
1

Możesz również rozważyć zastąpienie aktualizacji i rysowanie połączeń, a po prostu powrót.

Nie należy również wywoływać urządzenia graficznego w głównych klasach gier, co powinno uniemożliwić wystąpienie okna xna w grze działającej jako serwer.

Jason Coombes
źródło