2017-10-13 7 views
0

Je viens de faire un jeu de Pong en Java mais j'ai quelques questions sur le fonctionnement du FPS. Actuellement, le jeu tourne aussi vite que l'ordinateur peut le gérer et si je cours le jeu sur un ordinateur plus rapide, alors le jeu accélérera beaucoup plus vite que la normale. Je résolu ce problème en ajoutant une minuterie pour éviter le jeu de courir trop vite:Java - FPS fonctionne correctement

timer = new Timer(5, this); 
timer.start(); 

Cependant, en raison de la minuterie, le FPS ne peut pas aller sur une limite spécifique, peu importe à quelle vitesse l'ordinateur est. Quand le FPS tombe, au lieu de ralentir le programme, je veux qu'il soit "à la traîne" comme dans un vrai jeu sur ordinateur. Comment puis-je faire cela? Je veux forcer le jeu à tourner à une certaine vitesse afin que le FPS baisse au lieu que le programme ralentisse.

Mon compteur FPS ressemble actuellement à ceci:

if(System.currentTimeMillis() - time >= 1000){ 
     time = System.currentTimeMillis(); 
     fps = newfps; 
     newfps = 0; 
    } 
    else{ 
     newfps++; 
    } 
    g.setFont(new Font("Arial", Font.BOLD, 25)); 
    g.drawString(fps + "", 5, 22); 

S'il vous plaît me dire si je suis pas clair au sujet de ma question.

+0

Que voulez-vous dire par "retard"? Souhaitez-vous que le dessin se produise plus lentement que le jeu ne fonctionne? – Igor

+0

Si le FPS tombe pour une raison quelconque, je veux que le programme saute des images au lieu de ralentir le programme entier. Je veux arrêter le programme de ralentir ou de courir trop vite. – enheldel

+0

Le FPS sera éventuellement limité par votre matériel d'affichage. Jetez un coup d'œil à l'implémentation de VSynch dans votre jeu afin de rendre les données à un taux optimal pour votre GPU et votre moniteur. En outre, assurez-vous que vous utilisez le double tampon - https://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html –

Répondre

0

À la base, il s'agit d'un problème de threading. Utilisez (au moins) un thread pour faire tous les calculs pour votre jeu, et un autre pour rendre. Cela signifie que les cycles de rendu seraient indépendants du traitement en arrière-plan et ne devraient pas avoir la capacité de les ralentir.

+0

Je n'ai jamais appris à créer des discussions, je peux essayer de trouver un tutoriel sur la façon de faire cela, merci. – enheldel

+0

Bien sûr. si ma réponse m'a aidé, n'oubliez pas de le marquer – Igor