2017-10-19 1 views
-1

Dans le jeu que je fais dans Android Studio, je veux avoir un objet qui s'érode avec le temps. Une fois que l'objet est complètement érodé, le joueur peut l'éliminer pour obtenir des points. Je souhaite que cette valeur temporelle soit basée sur l'heure réelle afin que l'élément continue de s'éroder pendant que l'application est fermée.Comment devrais-je calculer le temps que le joueur a passé loin de l'application?

Quelle serait la meilleure façon d'y parvenir? Dois-je utiliser des variables de date, ou puis-je m'en sortir avec quelque chose de plus simple?

+0

utiliser un ** timer tas k ** avec mangeoire d'alarme si nécessaire –

Répondre

0

Il est une approche assez facile que vous pouvez utiliser via sharedprefrences et service, lorsque l'application a été tué enregistrer la variable de date et l'heure lorsque l'utilisateur est revenu à votre application, vous pouvez vérifier la valeur par rapport à votre clé enregistrée, si elle n'est pas NULL Comparez-le avec votre temps actuel et obtenez la différence entre les deux. C'est comme ça que vous pouvez l'obtenir.

+1

bonne et solution réalisable. –

0

Lorsque l'objet commence érode, sauf le temps:
long startTime = SystemClock.elapsedRealtime();

Dans votre onPause(), sauf cette fois-ci:

public void onPause() { 
    SharedPreferences.Editor editor = getSharedPreferences("myPrefs", MODE_PRIVATE).edit(); 
    editor.putLong("startTime", startTime); 
    editor.commit(); 
    super.onPause(); 
} 

Dans votre onResume(), obtenir le gain de temps et de comparer avec le temps en cours :

public void onResume() { 
    SharedPreferences prefs = getSharedPreferences("myPrefs", MODE_PRIVATE); 
    long startTime = prefs.getLong("startTime", 0); 
    long elapsedTime = SystemClock.elapsedRealtime() - startTime; 

    if (elapsedTime > EROTION_TIME) { 
     // Voila !! The object has eroded. 
    } 
} 
+0

Je suppose que c'est un très bon choix compte tenu de la documentation (https://developer.android.com/reference/android/os/SystemClock.html) comme mentionné: SystemClock.elapsedRealtime() retourne le temps depuis le démarrage du système [. ..] Cette horloge est garantie être monotone [...] ainsi est la base de recommandation pour la synchronisation d'intervalle de but général. –

+0

ce n'est vraiment pas. Lorsque les périphériques redémarrent, cette horloge est réinitialisée. Vous devriez simplement utiliser les millis 'réguliers' depuis l'époque –