Execute o jogo XNA sem gráficos

11

Pensando se existe alguma maneira de executar um jogo XNA sem exibir nada.

Eu tenho um jogo de trabalho que roda em uma configuração de servidor do cliente em que um jogador é o host e outras pessoas podem se conectar ao seu jogo.

Agora eu quero poder rodar o jogo como um host em um servidor decicado sem placa gráfica, basicamente não quero executar nenhuma lógica Draw ().

Eu realmente preciso passar por todo o jogo e remover todas as referências ao XNA?

Como as pessoas fizeram isso?

Edição : A razão pela qual eu quero fazer isso é porque eu tenho uma configuração de servidor cliente em funcionamento no jogo e eu não quero fazer um programa de servidor "sem cabeça" separado.

JensB
fonte
Por que você não pode simplesmente escrever código Drawcomo if (headless) { return; }?
ashes999
1
@ asher999 Não tenho certeza se isso removerá completamente toda a lógica de desenho e gráficos do jogo. Um servidor virtual pode não ter nenhum adaptador gráfico real.
JensB
Alterar o tipo de saída ou pular o desenho não removerá magicamente a dependência do XNA em um dispositivo gráfico. Se você estiver carregando algum conteúdo que exija um dispositivo gráfico (especialmente texturas), há uma chance muito boa de que eles falhem ao carregar usando uma das soluções propostas.
Dadoo Games

Respostas:

10

Basta criar um projeto C # normal e incluir os binários XNA. Isso dará acesso aos tipos de dados e métodos de estrutura do XNA. Meu jogo faz isso e funciona perfeitamente.

sem título
fonte
1
Eu acho que você escreveu um wrapper que age como o XNA chamando os métodos necessários, como o Update para você? Vou tentar, obrigado.
JensB
2

A resposta é: não faça isso. Se você não precisa fazer um jogo - ie; você não está procurando tirar proveito das coisas que o XNA oferece, por que fazê-lo? Você realmente deveria estar desenvolvendo um software personalizado que possa simular com sucesso o jogo que deseja jogar - normalmente um sistema de console de algum tipo. Se você fornecer mais detalhes, atualizarei minha resposta com uma resposta menos genérica.

Vaughan Hilts
fonte
1
Eu posso lhe dar uma razão: teste de unidade. Frequentemente, você deseja testar um trecho ou seção de código sem precisar carregar ou desenhar e gráficos.
Stephen Tierney
3
@StephenTierney Eu posso lhe dar outro motivo: ele não está tentando, ele está tentando executar um servidor de jogo (em uma máquina dedicada). Releia a pergunta e considere retomar seu voto negativo.
Vaughan Empunhaduras
1

Bem, se você simplesmente deseja eliminar as chamadas de draw, você tentou usar isso: Suprimir Draw

H3llrais3R
fonte
1

Para aproveitar a sugestão de sem título, você pode incluir apenas referências às DLLs e usá-las sem usar nenhum dos loops de jogo padrão. Para exemplos disso, você pode ver a série de tutoriais sobre formas de win win no clube de criadores: http://xbox.create.msdn.com/en-us/education/catalog/sample/winforms_series_2

Além disso, se você quiser ficar ainda mais sofisticado, poderá substituir todo o ciclo do jogo XNA pelo seu próprio costume e controlar todo o processo. Para obter mais informações sobre isso, consulte /programming/6361691/custom-xna-game-loop-in-windows

Rochedo duro
fonte
1

Se você alterar o Tipo de Saída de um Projeto XNA para "Aplicativo de Console", o aplicativo simplesmente abrirá um Console vazio na inicialização, sem abrir a janela do jogo. Isso pode ser útil para o que você está tentando realizar, já que deseja fazer testes e pode usar muito facilmente o console como uma janela de depuração.

UBSophung
fonte
1

Você também pode substituir a atualização e fazer chamadas e simplesmente retornar.

Além disso, não chame o dispositivo gráfico em suas principais classes de jogos, o que deve impedir que a janela xna seja instanciada no jogo, agindo como seu servidor.

Jason Coombes
fonte