J’écris un jeu en utilisant C # 2010 et XNA 4.0. Je veux que ce soit un bon jeu et non pas “juste une autre merde” et donc un de mes objectives est un bon framerate. Pour cela, je voudrais vous demander quelques conseils, qu’ils soient liés à XNA ou à C # – que puis-je faire pour accélérer mon code et ainsi améliorer le FPS.
Voici quelques trucs que j’ai découverts:
array
insted of list
améliorera beaucoup les performances, si vous voulez accéder à une quantité énorme de données (ou même beaucoup: avoir un tableau de 20000 éléments donne presque 180% FPS de la liste de 20000. for
au lieu de foreach
améliorera les performances. Sur les mêmes 20000 éléments, la différence est de 5-10%. drawuserprimitives
et non la classe Model
. (aucune idée s’il s’agit de la version 4.0 uniquement, ou si la version 3.1 présentait un tel problème de performances Ok, donc pour faire une longue histoire, merci de poster quelques bons conseils ici, pour que je puisse / que nous puissions faire de bons jeux rapides et optimisés;)
Merci d’avance: Zéiksz
UberGeekGames a un bon article sur l’optimisation XNA. Il s’adresse principalement à la Xbox et à WP7, mais la plupart des choses s’appliquent également aux PC.
Le site original est mort, mais est disponible dans les archives Internet:
Version archivée d’optimisations de performances haut de gamme sur la xbox 360 et windows phone7
La règle de base est “profil avant l’optimisation”.
L’optimisation logicielle est un métier. Les meilleures optimisations sont basées sur des statistiques collectées.
Tant que vous n’avez pas de problème, n’optimisez pas. Ne pensez-vous pas que la jouabilité du jeu est plus importante que cette mésortingque ou une autre? Ma suggestion est de commencer par le jeu, puis de déterminer où il ne fonctionne pas comme vous le souhaitez.
Ensuite, posez des questions spécifiques et je suis sûr que vous obtiendrez de l’aide ici.
En attendant, je suggère que vous obteniez plus d’informations à partir de livres de développement de jeux tels que ceux énumérés ici: http://forums.create.msdn.com/forums/p/8642/45646.aspx .
XNA Extereme 101 – semble être un tutoriel intéressant
Mes 2 centimes d’euro:
Ne mettez pas tout votre code dans une seule méthode car vous pensez qu’il est coûteux d’appeler une méthode. Si vous pensez que votre perte de 1-3 FPS en appelant une méthode vide, vous n’avez probablement pas fini de rechercher la perte de 1-3. Pour que cette perte soit vraie lors d’un appel de méthode vide, vous devez disposer d’un FrameRate sur BEAUCOUP de milliers … sans que vous ayez à vous soucier d’une chute de 1-3.
Le FPS est un mauvais moyen de juger des performances dans XNA. Lorsque le pas de temps variable est activé, d’autres processus avec lesquels le système d’exploitation est impliqué peuvent influer sur votre fréquence d’images. Vous avez vraiment besoin de profiler à la place. Concentrez-vous simplement sur le temps qu’il faut pour terminer les méthodes Update et / ou Draw en les synchronisant avec un object System.Diagnostic.Stopwatch. chronométrez-les individuellement, pas ensemble (très important).
Le mot-clé “nouveau” ne doit pas seulement être évité dans l’appel de tirage au sort, mais n’importe où dans les types de référence update & draw … FOR uniquement. Utilisez le nouveau mot-clé à tout moment et n’importe où avec les types de valeur.