XNA/MonoGame: Obtenir le nombre d'Images Par Seconde
Je suis en train de récupérer les IPS de mon jeu, mais je ne peux que trouver des méthodes qui met à jour les FPS variable à chaque seconde. E. g. https://github.com/CartBlanche/MonoGame-Samples/blob/master/Draw2D/FPSCounterComponent.cs et http://www.david-amador.com/2009/11/how-to-do-a-xna-fps-counter/
Est-il un moyen d'avoir un en permanence la mise à jour de FPS étiquette?
Fps = images par deuxième, de toute façon: il suffit de decrese les tiques de la minuterie (f.e laps de Temps.FromMilliseconds) et le projet à un autre (si vous obtenez le fps toutes les 0,5 secondes de le multiplier par 2)
J'ai essayé, mais il me donne des résultats bizarres. Auriez-vous l'esprit de fournir quelque chose pour moi?
Je ne peux pas le faire sans sauter dans des dizaines (de 60 à 50, etc)
J'ai essayé, mais il me donne des résultats bizarres. Auriez-vous l'esprit de fournir quelque chose pour moi?
Je ne peux pas le faire sans sauter dans des dizaines (de 60 à 50, etc)
OriginalL'auteur Jeff | 2013-12-19
Vous devez vous connecter pour publier un commentaire.
Voici un compteur de FPS classe, j'ai écrit tout à l'heure. Vous devriez être en mesure de le placer dans votre code et l'utiliser en tant que tel..
Tout ce que vous devez faire est de créer une variable de membre dans votre Jeu principal de la classe..
Et d'appeler la méthode de mise à Jour de votre Jeu de Tirage de la méthode et de dessiner l'étiquette toutefois vous le souhaitez..
Profitez-en! 🙂
Vous êtes les bienvenus. Vous pouvez jouer avec le MAXIMUM_SAMPLES valeur ou d'essayer de la CurrentFramesPerSecond propriété plutôt. Je n'ai pas mis beaucoup d'efforts à faire, il est parfait. Mon but était juste pour faire quelque chose de facilement réutilisables.
Où est la File d'attente de la collection à venir? J'en ai trouvé un dans le Système.Collections, mais c'est un non-type générique qui ne fonctionne pas de la manière prévue ici (avec un type float). Je n'ai pas besoin de cela pour un projet qui vient d'être intéressés.
La file d'attente<T> est dans le Système.Les Collections.Générique msdn.microsoft.com/en-us/library/7977ey2c%28v=vs.110%29.aspx
pour la décomposition moyenne, le deuxième extrait de code dans cette réponse que j'ai posté tout à l'heure devrait faire l'affaire, mais la façon la plus précise au total serait de compter les images à l'intérieur de la
Draw
méthode comme dans cet exemple par Shawn Hargreaves.OriginalL'auteur craftworkgames
Vous pouvez obtenir le courant de framerate à tout moment à l'aide de cette formule:
Les deux autres méthodes présentées ci-dessous vous donnent une modification de la fréquence, destiné à être plus lisse, et ont moins de fluctuations dans la valeur de retour
Celui-ci fonctionne par la pondération de tous les précédents frametimes sur une échelle logarithmique. Je n'aimais pas l'idée de l'utilisation d'un moyen pour obtenir une métrique sur les performances du jeu comme framedrops ne sont pas bien représentée (ou à tous si vous avez une bonne moyenne) et de très faible à très haute cadence des images ont des niveaux très différents de précision, si elles sont exécutées sur le même moyen.
Pour résoudre ce problème, j'ai fait un SmartFramerate classe (nom terrible, je sais)
Vous définissez le poids lorsque vous créez la variable:
(un poids plus élevé est plus précis à l'instantané framerate, un poids plus faible est plus lisse. Je trouve que 3-5, un bon équilibre)
Appeler la méthode de mise à Jour n'importe où qui sera exécuté à chaque image:
L'actuel taux de rafraîchissement peut être consulté comme suit:
ou imprimé comme suit:
(Je suis en train de mettre en une impression personnalisée de la classe, donc je m'excuse si la syntaxe ressemble funky)
Cependant, si vous souhaitez simplement la moyenne d'un certain nombre de cadres, alors que cette classe est le moyen le plus efficace que j'ai trouver pour le faire.
Pour l'utiliser, il suffit d'initialiser un SmoothFramerate variable à l'endroit où vous souhaitez l'utiliser, en passant de la quantité d'images que vous souhaitez moyenne:
Mise à jour, d'accéder et d'imprimer le framerate exactement comme vous le feriez à l'aide de la SmartFramerate classe au-dessus.
Merci pour la lecture, j'espère que cela aide quelqu'un à sortir.
OriginalL'auteur Darius
Utiliser un double à la mesure fps:
Modifier la méthode
Update
comme suit:Je n'ai pas testé le code, mais vous devez obtenir l'idée.
Désolé, pas encore là encore - j'ai écrit un code qui mettra l'accent sur le dessin, et pendant le débogage, j'ai constaté que lorsque frameCounter est 1, le FPS = ~60, mais quand frameCounter = 0, le FPS = 0.
En déplaçant le tout dans la méthode Draw, il passe de 60 à 30 de 20 à la 15 à 12 à chaque fois que je peux ajouter plus de données de dessin (beaucoup de données)...
OriginalL'auteur helb
Vous avez probablement essayer de mettre à jour IPS dans toutes les opérations de dessin. Ce sera très instable valeur, vous devez parfois plus, parfois moins. Pour des valeurs plus stables de prendre la moyenne de plusieurs valeurs.
La façon la plus simple de compter les FPS est probablement compter les dessins. Et ont minuterie-les bases de la fonction de quoi tenir cette valeur permet de dire à chaque seconde, calculer le nouveau fps et claire compteur. Faire de ce délai plus long (à l'exemple 2 sec), ou tout simplement prendre 10 derniers fps des valeurs et de l'affichage de la moyenne.
Dans certains jeux, j'en ai vu ils ont également compter au maximum le temps nécessaire pour redessiner la scène. Ce pourrait être un sujet intéressant valeur trop. Pour cela, vous pouvez mesurer la longueur de fonction draw: s'inscrire à la fois au début et à la fin, la différence serait la le temps.
De prendre note, si vous activez la synchronisation, vous tardez à attirer l'opération jusqu'à la prochaine synchronisation, c'est peut-être la raison de l'étrange résultats?
OriginalL'auteur Sinatr
Une méthode simple qui met à jour chaque Tirage() serait:
Vous pouvez également déposer que dans la méthode Update() pour voir comment souvent que les feux de trop, si vous voulez.
Si vous voulez ralentir la rapidité des mises à jour...
OriginalL'auteur Genzzry