如何在Android中使用计时器进行评分?

时间:2012-09-28 01:28:57

标签: android timer scoring

我打算使用一个可见的计时器,它会从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.wasPopped)时,它都会从屏幕上移除(并从指定的列表中删除),然后会显示图像(spritePopped)以指示它被触及(为了增加效果)。如何为计时器创建单独的类并在我的GameView中使用它? 到目前为止,我已经遇到过使用刻度线进行评分,根据在某个类中调用了多少update()个事件来计时。任何意见/建议都会非常有帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用TimerTask,但不建议这样做,因为它可能会因为主线程上没有运行而产生一些不良影响。

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

    private float displayedTime;

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

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

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

答案 1 :(得分: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();

}