1

我打算使用一个可见的计时器,从 30 秒倒计时到 0 秒。这个计时器将作为我的游戏应用程序中得分的基础,因为每次触摸移动的精灵(包含一个数字)但与请求的数字不匹配(如窗口/通知中所示),当前剩余时间将被扣除5 秒 (-5)。但是如果包含匹配数字的精灵被触摸,则计时器停止并且游戏重新开始(或移动到下一个级别)。

这是类touchEvent内部的代码GameView

@Override
   public boolean onTouchEvent(MotionEvent event) {
         if (System.currentTimeMillis() - lastClick > 300) {
                lastClick = System.currentTimeMillis();
                float x = event.getX();
                float y = event.getY();
                synchronized (getHolder()) {
                       for (int i = sprites.size() - 1; i >= 0; i--) {
                              Sprite sprite = sprites.get(i);
                              if (sprite.wasPopped(x, y)) {
                                    sprites.remove(sprite);
                                    spritePopped.add(new TempSprite(temps, this, x, y, pop));
                                    break;
                              }
                       }
                }
         }
         return true;
   }

每次触摸移动精灵周围的区域时sprite.wasPoppedspritePopped如何为计时器创建一个单独的类并在我的GameView? 到目前为止,我遇到过使用刻度来计分,它是根据update()某个类中调用了多少事件来计时的。任何评论/建议都会非常有帮助。

4

2 回答 2

0

您可以使用 aTimerTask但不推荐使用,因为由于不在主线程上运行,它可能会产生一些不良影响。

您应该做的是获取deltaTime并将其存储在变量中。

    private float displayedTime;

    Public void timer(){ //call in update()
      displayedTime += deltaTime;
  }

然后你可以混合它来获得完整的秒数或任何你喜欢的计时器。

您不应在更新方法中使用任何类型的计数器来检查时间或添加延迟,因为这会对无法以全 FPS 运行游戏的设备产生不良影响。

于 2012-09-28T17:48:59.017 回答
0

我发现了一个类似的问题,这里的计时器是在一个单独的类中创建的:

import android.os.CountDownTimer;
import android.widget.TextView;

public class MyCount extends CountDownTimer {
static TextView timeDisplay;

public MyCount(long millisInFuture, long countDownInterval) {
    super(millisInFuture, countDownInterval);
}

public void onFinish() {
    timeDisplay.setText("Time has ended. Game over.");
    //restart(); 
}

public void onTick(long millisUntilFinished) {
    timeDisplay.setText("Left: " + millisUntilFinished / 1000);
}

}

然后在 GameView 类中的一个单独函数中调用它(一旦游戏开始就会启动):

public void setTimer() { 
timeDisplay = new TextView(this);
this.setContentView(timeDisplay);
MyCount counter = new MyCount(30000, 1000);
counter.start();

}

于 2012-09-28T20:23:54.627 回答