安卓游戏 - 追踪时间

时间:2011-11-16 15:00:08

标签: android

我有一个Android的益智游戏。当谜题开始时,我采取当前时间:

long startTime = System.currentTimeInMillis()

当玩家完成拼图时,我会再次抽出时间,减去开始时间并计算出已用时间。一切都好。

我的问题是应用程序中断时该怎么办。例如通过电话。此刻,拼图会自动保留在之前的状态(就像在视图中一样)。但是,计算completionTime = currentTime - startTime现在无效。

我尝试使用onSaveInstaceState(Bundle)保存已用时间。但是,重新进入应用程序时不会调用其对应的onRestoreInstanceState(Bundle)。相反,调用onResume()方法?我读过这是因为应用程序没有被“杀死”,而是仍然在内存中。在'杀'的情况下,我会想到View的状态也会丢失?在这种情况下我不认为跟踪视图是非常必要的,所以我也不会担心时间。

有没有办法从onResume()读取一个包,我应该只实现共享首选项吗?

我想避免更新游戏循环中的已用时间,因为这似乎效率低下。

2 个答案:

答案 0 :(得分:9)

我建议不要使用SharedPreference。


您只需要2个字段: startTime elapsedTime

播放器启动时,将 elapsedTime 初始化为 0 ,将 startTime 初始化为 System.currentTimeMillis()

调用onPause()后,使用

初始化 elapsedTime
elapsedTime = elapsedTime + (System.currentTimeMillis() - startTime);

调用onResume()后,将 startTime 初始化为 System.currentTimeMillis()

当玩家完成时,时间是

elapsedTime = elapsedTime + (System.currentTimeMillis() - startTime);

如果逻辑有缺陷,请注释(:

注意:有一种方法只能使用一个字段。但我们会保留这一点供读者发现。

答案 1 :(得分:2)

共享偏好对我来说似乎更好。

  1. 计算onPause()中的时差,当游戏进入后台时,假设用户已在玩游戏。将此差异添加到共享首选项中的上一次,然后再次存储。

  2. 在onResume()上再次启动时钟,并在必要时重复步骤1.

  3. 我希望你明白这一点。