java - run() 方法内的时间

标签 java android

我在 run() 方法中有一个简单的游戏循环。该类正在实现Runnable。我只想创建一些简单的计时代码来跟踪玩家玩游戏的时间。假设我想在两分钟后结束游戏。

我不确定我这样做是否正确,因为我在屏幕上显示的时间不是秒,而是像 1370502588 这样的时间格式。我做错了什么?

以下是 run() 方法内的部分代码:

// Game loop ---------------------------------------
@Override
public void run() {
// TODO Auto-generated method stub

// Time 
long startGameTime = 0;
long milliSeconds;
int seconds;

while (gameRunning) {
  if (!surfaceHolder.getSurface().isValid())
    continue;

  try {
    milliSeconds = System.currentTimeMillis() - startGameTime;
    seconds = (int) (milliSeconds / 1000);
    if (seconds > 120)
      // Game over
      canvas = surfaceHolder.lockCanvas();
      ...

编辑:LogCat

06-06 07:27:06.831: E/Trace(864): error opening trace file: No such file or directory (2)
06-06 07:27:07.601: D/libEGL(864): loaded /system/lib/egl/libEGL_emulation.so
06-06 07:27:07.611: D/(864): HostConnection::get() New Host Connection established 0x2a142400, tid 864
06-06 07:27:07.721: D/libEGL(864): loaded /system/lib/egl/libGLESv1_CM_emulation.so
06-06 07:27:07.721: D/libEGL(864): loaded /system/lib/egl/libGLESv2_emulation.so
06-06 07:27:07.731: D/dalvikvm(864): GC_CONCURRENT freed 232K, 10% free 7430K/8199K, paused 99ms+117ms, total 354ms
06-06 07:27:07.801: W/EGL_emulation(864): eglSurfaceAttrib not implemented
06-06 07:27:07.821: D/OpenGLRenderer(864): Enabling debug mode 0
06-06 07:27:08.121: I/Choreographer(864): Skipped 35 frames!  The application may be doing too much work on its main thread.
06-06 07:27:08.201: W/dalvikvm(864): threadid=12: thread exiting with uncaught exception (group=0x40a13300)
06-06 07:27:08.211: E/AndroidRuntime(864): FATAL EXCEPTION: Thread-88
06-06 07:27:08.211: E/AndroidRuntime(864): java.lang.IllegalArgumentException
06-06 07:27:08.211: E/AndroidRuntime(864):  at android.view.Surface.unlockCanvasAndPost(Native Method)
06-06 07:27:08.211: E/AndroidRuntime(864):  at android.view.SurfaceView$4.unlockCanvasAndPost(SurfaceView.java:785)
06-06 07:27:08.211: E/AndroidRuntime(864):  at se.test.game.GameLoop.run(GameLoop.java:269)
06-06 07:27:08.211: E/AndroidRuntime(864):  at java.lang.Thread.run(Thread.java:856)

最佳答案

而不是

long startGameTime = 0;

long startGameTime = System.currentTimeMillis();

那么,您已经拥有的这一行就更有意义了:

milliSeconds = System.currentTimeMillis() - startGameTime;

在您的版本中,您将当前时间减去 0,这意味着用户从 1970 年 1 月 1 日起就开始玩游戏。在我的版本中,您从当前时间中减去实际开始时间,结果是这两个时刻之间的时间跨度。

关于java - run() 方法内的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16955884/

相关文章:

java - 线程 "AWT-EventQueue-0"javax.speech.EngineStateError : Invalid EngineState 中的异常

Android:给LinearLayout添加自己的View

java - 将图像下载到内部存储并在android中读取

java - 如何在Java中不使用构造函数手动实现链表?

java - Android Studio(IntelliJ),maven构建工具: Failed to load dx. jar

android - 应用程序无法在设备上运行

java - 如何在登录后重定向处于不同 Activity 的 2 个不同用户?

java - Android:通过单击按钮将一个 Activity 中的 TextView 添加到另一个 Activity 中的 ListView

java - 通过 Telegram Bot 将图像发布到 Telegram channel

java - 将背景图像设置为与 Java 应用程序中的窗口/屏幕大小相同