0

run()メソッド内に単純なゲーム ループがあります。クラスは を実装してRunnableいます。単純なタイミング コードを作成して、プレイヤーがプレイしている時間を追跡したいだけです。2分後にゲームを終了したいとしましょう。

画面に表示される時間は秒ではなく、long1370502588 のような時間形式であるため、これを正しく行っているかどうかはわかりません。何が間違っていますか?

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)
4

2 に答える 2

4

それ以外の

long startGameTime = 0;

行う

long startGameTime = System.currentTimeMillis();

次に、すでに持っているこの行は、はるかに理にかなっています。

milliSeconds = System.currentTimeMillis() - startGameTime;

あなたのバージョンでは、現在の時刻の 0 を引いています。これは、ユーザーが 1970 年 1 月 1 日からプレイしていることを意味します。私のバージョンでは、現在の時刻から実際の開始時刻を差し引いた結果が、その2つの瞬間の間。

于 2013-06-06T07:16:09.127 に答える