2011-10-20 7 views
1

Je travaille sur mon premier jeu :)calendrier boucle jeu Android différence

Il est un jeu basé sur Android à l'aide libgdx et utilise un exemple modifié d'un des DeWiTTERS loop

La boucle de jeu semble fonctionne parfaitement bien sur le bureau (59 - 60 fps) mais quand je cours sur mon téléphone, il a tendance à s'asseoir autour de 75 - 90 FPS

nextGameTick devrait toujours se référer à 16ms dans le futur de sorte que la boucle de jeu fonctionne à 60 FPS ou moins, pourquoi n'est-ce pas le cas

Voici la partie principale de la boucle de jeu pour référence:

public void render() { 
    nextGameTick = System.nanoTime() + skipTicks; 
    loopTimeFull = System.nanoTime(); 

    Application app = Gdx.app; 

    screen.update(app); // Update the screen 
    screen.render(app); // Render the screen 

    // when the screen is done we change to the 
    // next screen 
    if (screen.isDone()) { 
     // dispose the current screen 
     screen.dispose(); 
     <snip> 
     // Removed unneded part of code for this example 
     </snip> 
     } 
    } 

    // Make the thread sleep 
    General.renderTime = System.nanoTime() - loopTimeFull; 
    while (System.nanoTime() <= nextGameTick - General.renderTime) { 
     try { 
      Thread.sleep(1); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    General.loopTime = System.nanoTime() - loopTimeFull; 
    if (General.loopTime > 0) 
     General.curFps = 1000000000/General.loopTime; 
    else 
     Gdx.app.log("Air Offense", "General.loopTime == 0"); 
+0

Pourriez-vous expliquer le but de 'General.curFps = 1000000000/General.loopTime;'? –

+0

@MisterSmith thats ce qui calcule le FPS il divise le nombre de nanosecondes dans une seconde par le temps que la boucle a pris en nanosecondes –

+1

Je ne sais pas si c'est la cause du problème, mais il me semble mauvaise conception à dormir pour cette petite quantité de temps. C'est à peu près une attente active. La méthode 'Thread.sleep' que vous utilisez a un paramètre en ms. Il y a une méthode surchargée acceptant ns aussi. Cependant, aucun d'entre eux ne sont garantis pour dormir exactement un certain temps. Pour avoir une plus grande précision, utilisez une minuterie pour dormir exactement les ns requis en une seule attente. –

Répondre

1

En utilisant des échantillons de code de HERE a résolu mon problème

grâce à Monsieur Smith pour la réponse.

+0

seriez-vous en mesure de publier votre boucle de jeu fixe s'il vous plaît? – akonsu