我打算使用一个可见的计时器,它会从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()
个事件来计时。任何意见/建议都会非常有帮助。
答案 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();
}