Per spiegare meglio il concetto ho caricato un video su Youtube:
https://www.youtube.com/watch?v=X4DwD-DLOI
Il programma è esattamente lo stesso e fa due cose: muovere un quadrato rosso da sinistra a destra e animare una piccola scritta cambiandone il colore.
Come potete vedere nel primo dispositivo il quadrato arriva dall'altra parte molto più velocemente del secondo.
Inizialmente ho pensato che magari l'app prendesse come dimensioni di schermo quelle del dispositivo corrente e che i due dispositivi avessero risoluzioni differenti cosicchè risultassero valori molto diversi di lunghezza e larghezza tra un dispositivo e l'altro.
Poi mi sono ricordato che notavo differenze anche nelle animazioni, le quali non sfruttano lunghezza e larghezza max del dispositivo.
E infatti come potete vedere nel video, anche la velocità in cui cambia il colore della scritta è molto più veloce nel primo dispositivo rispetto al secondo.
Quello che infine ho notato è che nel secondo dispositivo la stessa app risulta tutta molto scattosa, eppure l'app è la stessa ed è da escludere che sia un problema legato alle prestazioni del secondo dispositivo in quanto è un problema che si verifica solo con le mie app.
Ho quindi pensato che forse il problema sia legato alla questione dei frame al secondo, anche se non mi convince neanche questa opzione.
Comunque riporto la parte di codice che dovrebbe gestire i frame al secondo:
public void run() {
Rect dstRect = new Rect();
long startTime = System.nanoTime();
while(running) {
if(!holder.getSurface().isValid())
continue;
float deltaTime = (System.nanoTime() - startTime) / 10000000.000f;
startTime = System.nanoTime();
if (deltaTime > 3.15){
deltaTime = (float) 3.15;
}
game.getCurrentScreen().update(deltaTime);
game.getCurrentScreen().paint(deltaTime);
Canvas canvas = holder.lockCanvas();
canvas.getClipBounds(dstRect);
canvas.drawBitmap(framebuffer, null, dstRect, null);
holder.unlockCanvasAndPost(canvas);
}
}
Qualcuno ha altre idee in proposito su come risolvere?