簡體   English   中英

如何在Android中使用計時器進行評分?

[英]How to use timer for scoring in Android?

我打算使用一個可見的計時器,該計時器將從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顯示圖像( spritePopped )以指示已觸摸的位置(以增強效果)。 。 如何為計時器創建單獨的類並在GameView使用它? 到目前為止,我遇到了使用滴答聲進行評分的方法,該評分是根據某個類中調用了多少update()事件來計時的。 任何意見/建議都將非常有幫助。

您可以使用TimerTask但不建議這樣做,因為由於未在主線程上運行,它可能會產生一些不良影響。

您應該做的是獲取deltaTime並將其存儲在變量中。

    private float displayedTime;

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

然后,您可以與此混合使用以獲得完整的秒數或您喜歡的任何計時器。

您不應在更新方法中使用任何類型的計數器來檢查時間或增加延遲,因為這會對無法以完整FPS運行游戲的設備產生不良影響。

我發現了與此類似的問題,在這里計時器是在單獨的類中創建的:

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();

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM