2009-12-25 6 views
0

J'essaie de garder mon jeu à 60fps, mais je reçois des résultats étranges de mon code comme "2-8000 fps" Pourquoi est-ce pas rester à 60?obtenir des résultats étranges de code framerate en Java

public void run(boolean fullscreen) { 
     this.fullscreen = fullscreen; 
     try { 
      long lastFrame = 0; 
      long frames = 0; 

      init(); 
      while (!done) { 
       frames++; 
       long startTime = System.nanoTime()/1000000; 
       try 
       { 
        System.out.println("framerate: " + ((System.nanoTime()/1000000 - startTime)/frames)); 

         //     123456: 6 zeros => 16ms 
         long nsToSleep = 17000000 - (System.nanoTime() - lastFrame); 
         System.out.println("ns: " + nsToSleep); 
         lastFrame = System.nanoTime(); 

         if(nsToSleep > 0) 
         { 
          System.out.println("ns2: " + (nsToSleep/1000)); 
          System.out.println("ns3: " + (nsToSleep%1000)); 
          Thread.sleep(nsToSleep/17000000, (int)(nsToSleep % 1000)); 
         } 
         else 
         { 
          Thread.yield(); // Only necessary if you want to guarantee that 
              // the thread yields the CPU between every frame 
         } 



       } 

       catch(Exception e){ 
         e.printStackTrace(); 
       } 


       mainloop(); 
       render(); 
       Display.update(); 
      } 
      cleanup(); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      System.exit(0); 
     } 
    } 
+1

Etes-vous sûr que startTime doit être recalculé dans la boucle? – diciu

Répondre

1
Thread.sleep(nsToSleep/17000000, ...); 

devrait être

Thread.sleep(nsToSleep/1000000, nsToSleep%1000000); 

Comme vous convertissez nanosecondes en millisecondes là.

Aussi, comme diciu souligné dans un commentaire sur votre question, vous devez déplacer le calcul de l'heure de début en dehors de la boucle.

Je ne l'ai pas encore testé, donc je ne sais pas si c'est tout ce dont vous aurez besoin pour le réparer, mais un coup d'œil rapide sur votre code semble indiquer que c'est le problème.

Questions connexes