2017-10-19 4 views
-1

Androidスタジオで作っているゲームで、時間の経過とともに侵食するオブジェクトが欲しいです。オブジェクトが完全に侵食されると、プレイヤーはポイントのためにそれをバストすることができます。この時間値を実際の時間に基づいて、アプリが終了している間アイテムが侵食し続けるようにします。プレイヤーがアプリから過ごした時間をどのように計算すればよいですか?

これを達成するにはどうすればよいでしょうか? Date変数を使用すべきか、もっと簡単なもので取り除くことができますか?

+0

** timer tas必要に応じてアラームマネージャーでk ** ** –

答えて

0

sharedprefrencesserviceでアプリが終了したときにアプリケーションが終了し、ユーザーがアプリに戻ったときに保存されたキーと値を比較することができますあなたの現在の時間と比較し、両方の違いを得る。それはあなたがそれを得る方法です。

+1

良いと実現可能なソリューション。 –

0

オブジェクトが侵食を開始すると、時間の節約:あなたのonPause()
long startTime = SystemClock.elapsedRealtime();

、この時間を節約:あなたのonResume()

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

を保存した時刻を取得し、現在の時刻と比較:

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

上記のようにドキュメント(https://developer.android.com/reference/android/os/SystemClock.html)を考えると、本当に良い選択だと思います。SystemClock.elapsedRealtime()は、システムが起動されてからの時間を返します。 ..]このクロックは単調であることが保証されています[...]ので、汎用のインターバルタイミングの推奨基準です。 –

+0

本当にそうではありません。デバイスがリブートすると、そのクロックはリセットされます。あなたはエポックから「通常の」ミリ秒を使うべきです –

関連する問題