Bonjour,
Je poste ici car mon problème est plus d'ordre général (je pense) que porté sur Android
Je travail actuellement sur un projet de jeux sous android avec un moteur à particules.
J'ai la net impression que n'ayant pas limité le fps cela me cause quelques problèmes.
L'année dernière j'ai travailler sur un jeu sous J2ME et le fait de ne pas limiter les cycles par seconde faisait que les touches du clavier ne répondaient pas assez rapidement.
Pour cela mon prof m'avais conseiller d'endormir le thread si j'avais déja fait mes 50 cycles par secondes, ce qui avait trés bien fonctionné. Cependant je ne suis pas sur que c'était la meilleure solution.
voila la methodes qu'il m'avait proposé:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 private static final int MAX_CPS = 50; private static final int MS_PER_FRAME = 1000 / MAX_CPS;Toujours est t-il que je n'arrive pas a l'implémenter cette solution de la même façon sous Android.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public void run() { long cycleStartTime = System.currentTimeMillis(); /************************************/ /*Engine.update();*/ /*Engine.draw();*/ /************************************/ long timeSinceStart = (cycleStartTime - System.currentTimeMillis()); if (timeSinceStart < MS_PER_FRAME) { try { Thread.sleep(MS_PER_FRAME - timeSinceStart); } catch(java.lang.InterruptedException e) {} } }
Ce qui mis la puce à l'oreille est que si je fais tourner mon programme pas par pas(en debug) tout les les sprites s'affichent correctement, mais si je laisse tourner mon programme normalement seulement 3/10 s'affiche en moyenne.
Comment peut on implémenter un système permettant de limiter le FPS (mieux que le CPS) de façon propre ? sachant que mon moteur tourne dans une boucle draw incluse dans un thread ?
Partager