Bonjour.
Je travaille sur un jeu mobile et j'ai un problème au niveau du calcul de la vitesse.
En fonction de l'état du smartphone, la vitesse des éléments n'est pas la même or elle devrait l'être.
Je fais appel à votre expertise car je ne sais pas comment résoudre le problème et d'où peut il venir exactement.
Pour la calculer, je procède ainsi, depuis le thread d'affichage GLES (afin qu'a chaque image donnée, la vitesse soit établie en fonction du temps passé avant l'image suivante ) :
En fait le problème est visible surtout quand la vitesse de mon objet est modifiée par un flux dont la vitesse est calculée pareillement depuis un autre objet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 long time = 0 ; void draw_() { float elapsedTime = (System.nanoTime() - time) / 1000000000f; time = System.nanoTime(); ... x += speedX*timeElapsed ; y += speedY*timeElapsed ;
Le flux est censé forcer l'objet (un petit robot en apesanteur) a prendre sa vitesse, un peu comme un objet flottant qui serait jeté dans une rivière.
Plus le flux est intense plus la vitesse de l'objet s'adaptera rapidement jusqu'à devenir la même que celle du flux.
Le problème est qu'en calculant la vitesse de l'objet séparément de la vitesse du flux, le décalage était trop grand et l'objet était toujours un peu plus lent au final que le flux.
Pour résoudre le problème j'ai triché en faisant ainsi :
En fait si le robot traverse un flux, sa vitesse est calculée en fonction du flux et selon le temps calculé par le flux, sinon il est calculé en fonction du temps du robot.
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 Flux f = Flux.getFlux(x,y, SIZE/2 ); if ( f != null ){ speedX += (f.getSpeedX() - speedX)*(f.intensity*f.timeElapsed); speedY += (f.getSpeedY() - speedY)*(f.intensity*f.timeElapsed); x += speedX*f.timeElapsed ; y += speedY*f.timeElapsed ; }else{ x += speedX*timeElapsed ; y += speedY*timeElapsed ; }
Ca marche...mais c'est pas net...quand le robot sort du flux on sent une différence mais ce que je ne comprends pas est pourquoi il y a autant de différence alors que la vitesse est calculée de la mène manière.
Si vous voulez mieux comprendre mon problème, vous pouvez télécharger (gratuitement) le jeu déjà disponible sur le google play :
https://play.google.com/store/apps/d...ostinasteroids
Merci si vous pouvez m'aider
Partager