Exécutez le jeu XNA sans graphiques


11

Vous vous demandez s'il existe de toute façon pour exécuter un jeu XNA sans afficher quoi que ce soit.

J'ai un jeu fonctionnel qui s'exécute dans une configuration de serveur client où un joueur est l'hôte et d'autres personnes peuvent se connecter à son jeu.

Je veux maintenant pouvoir exécuter le jeu en tant qu'hôte sur un serveur dédié sans carte graphique, en gros je ne veux pas exécuter de logique Draw ().

Dois-je vraiment parcourir tout le jeu et supprimer toutes les références à XNA?

Comment les gens ont-ils fait cela?

EDIT : La raison pour laquelle je veux le faire est parce que j'ai une configuration de serveur client qui fonctionne dans le jeu et que je ne veux pas créer un programme serveur "sans tête" séparé.


Pourquoi ne pouvez-vous pas simplement écrire du code Drawcomme if (headless) { return; }?
ashes999

1
@ asher999 Je ne sais pas si cela supprimera complètement toute la logique de dessin et de graphisme du jeu. Un serveur virtuel peut ne pas avoir de véritable carte graphique.
JensB

Changer le type de sortie ou sauter le dessin ne supprimera pas comme par magie la dépendance de XNA sur un périphérique graphique. Si vous chargez du contenu qui nécessite un périphérique graphique (en particulier des textures), il y a de très bonnes chances que ceux-ci ne se chargent pas en utilisant l'une des solutions proposées.
dadoo Games

Réponses:


10

Faites simplement un projet C # normal et incluez les binaires XNA. Cela vous permettra d'accéder aux types de données XNA et aux méthodes de framework. Mon jeu fait cela et il fonctionne parfaitement.


1
Je suppose que vous avez écrit un wrapper qui agit comme XNA appelant les méthodes nécessaires telles que Update pour vous? Je vais essayer, merci.
JensB

2

La réponse est: ne faites pas ça. Si vous n'avez pas besoin de faire un jeu - c'est-à-dire; vous ne cherchez pas à profiter des avantages offerts par XNA, pourquoi le faire? Vous devriez vraiment envisager de développer un logiciel personnalisé capable de simuler avec succès le jeu auquel vous souhaitez jouer - généralement un système de console quelconque. Si vous donnez plus de détails, je mettrai à jour ma réponse avec une réponse moins générique.


1
Je peux vous donner une raison: les tests unitaires. Souvent, vous voulez tester un morceau ou une section de code sans avoir à charger ou dessiner et des graphiques.
Stephen Tierney

3
@StephenTierney Je peux vous donner une autre raison: il n'essaye pas, il essaie de faire tourner un serveur de jeux (sur une machine dédiée). Veuillez relire la question et envisager de reprendre votre downvote.
Vaughan Hilts


1

Pour s'appuyer sur la suggestion de Untitled, vous pouvez simplement inclure des références aux DLL et les utiliser sans utiliser les boucles de jeu par défaut. Pour des exemples de cela, vous pouvez consulter la série de didacticiels winforms sur le club des créateurs: http://xbox.create.msdn.com/en-us/education/catalog/sample/winforms_series_2

De plus, si vous voulez devenir encore plus sophistiqué, vous pouvez remplacer la boucle de jeu XNA entière par votre propre boucle personnalisée et contrôler tout le processus. Pour plus d'informations sur ce look sur /programming/6361691/custom-xna-game-loop-in-windows


1

Si vous changez le type de sortie d'un projet XNA en "Application console", l'application ouvrira simplement une console vide au démarrage, sans jamais ouvrir la fenêtre réelle du jeu. Cela peut être utile pour ce que vous essayez d'accomplir, car vous voulez faire des tests et vous pouvez très facilement utiliser la console comme fenêtre de débogage.


1

Vous pouvez également envisager de remplacer la mise à jour et de tirer des appels, et de simplement revenir.

N'appelez pas non plus le périphérique graphique dans vos classes de jeu principales, ce qui devrait empêcher la fenêtre xna d'être instanciée sur le jeu en tant que serveur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.