如何在Android中使用计时器进行评分?
我计划使用一个可视计时器,从30秒倒计时到0秒。此计时器将作为我的游戏应用程序中得分的基础,因为每次触摸移动的精灵(包含数字),但与请求的数字不匹配(如窗口/通知中所示),当前剩余时间将扣除5秒(-5)。但如果触摸到包含匹配号码的精灵,计时器将停止,游戏将重新启动(或移动到下一个关卡) 以下是如何在Android中使用计时器进行评分?,android,timer,scoring,Android,Timer,Scoring,我计划使用一个可视计时器,从30秒倒计时到0秒。此计时器将作为我的游戏应用程序中得分的基础,因为每次触摸移动的精灵(包含数字),但与请求的数字不匹配(如窗口/通知中所示),当前剩余时间将扣除5秒(-5)。但如果触摸到包含匹配号码的精灵,计时器将停止,游戏将重新启动(或移动到下一个关卡) 以下是GameView类中touchEvent的代码: @覆盖 公共布尔onTouchEvent(运动事件){ 如果(System.currentTimeMillis()-lastClick>300){ last
GameView
类中touchEvent
的代码:
@覆盖
公共布尔onTouchEvent(运动事件){
如果(System.currentTimeMillis()-lastClick>300){
lastClick=System.currentTimeMillis();
float x=event.getX();
float y=event.getY();
已同步(getHolder()){
对于(int i=sprites.size()-1;i>=0;i--){
雪碧雪碧=雪碧。获取(i);
如果(精灵被弹出(x,y)){
雪碧。移除(雪碧);
添加(新的tempsrite(temps,this,x,y,pop));
打破
}
}
}
}
返回true;
}
每次触摸移动的精灵周围的区域(sprite.waspoop
),就会将其从屏幕上删除(以及从指定的列表中删除),随后会出现一个图像(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();