Androidスタジオで作っているゲームで、時間の経過とともに侵食するオブジェクトが欲しいです。オブジェクトが完全に侵食されると、プレイヤーはポイントのためにそれをバストすることができます。この時間値を実際の時間に基づいて、アプリが終了している間アイテムが侵食し続けるようにします。プレイヤーがアプリから過ごした時間をどのように計算すればよいですか?
これを達成するにはどうすればよいでしょうか? Date変数を使用すべきか、もっと簡単なもので取り除くことができますか?
Androidスタジオで作っているゲームで、時間の経過とともに侵食するオブジェクトが欲しいです。オブジェクトが完全に侵食されると、プレイヤーはポイントのためにそれをバストすることができます。この時間値を実際の時間に基づいて、アプリが終了している間アイテムが侵食し続けるようにします。プレイヤーがアプリから過ごした時間をどのように計算すればよいですか?
これを達成するにはどうすればよいでしょうか? Date変数を使用すべきか、もっと簡単なもので取り除くことができますか?
sharedprefrences
とservice
でアプリが終了したときにアプリケーションが終了し、ユーザーがアプリに戻ったときに保存されたキーと値を比較することができますあなたの現在の時間と比較し、両方の違いを得る。それはあなたがそれを得る方法です。
良いと実現可能なソリューション。 –
オブジェクトが侵食を開始すると、時間の節約:あなたの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.
}
}
上記のようにドキュメント(https://developer.android.com/reference/android/os/SystemClock.html)を考えると、本当に良い選択だと思います。SystemClock.elapsedRealtime()は、システムが起動されてからの時間を返します。 ..]このクロックは単調であることが保証されています[...]ので、汎用のインターバルタイミングの推奨基準です。 –
本当にそうではありません。デバイスがリブートすると、そのクロックはリセットされます。あなたはエポックから「通常の」ミリ秒を使うべきです –
** timer tas必要に応じてアラームマネージャーでk ** ** –