繁体   English   中英

如何设置一定时间后发生的事情?

[英]How to set something to happen after a certain amount of time?

我现在正在为Android编写游戏,但遇到一个问题,就是当我与敌人发生碰撞时,我的健康栏射击得太快了。

我想让它每秒只记录两个匹配。 截至目前,它似乎在1-2秒内经历了50帧动画。

请告诉我如何解决我的问题。

谢谢!

在一定时间后立即运行某事的最佳解决方案是使用TimerTask 例如,此代码在2011年12月31日运行。

Timer timer = new Timer();
timer.schedule(new TimerTask( 

public void run() {

    System.out.println("done");

}),

new Date(2011, 12, 31));

如何在上一次碰撞发生在您的播放器对象中时存储时间戳,并在检测到碰撞时将当前时间与时间戳进行比较? 如果经过的时间足够,请减少健康。 这样,您就不必受限于可能波动的帧速率。

将作业放入AsyncTaskdoInBackground()方法将递减该计数,发送进度更新,然后休眠一小段时间。

伪代码:

doInBackground(int howMuch) {
   while (howMuch > 0 ) {
       publishProgress(howMuch);
       Thread.sleep(1000 / howMuch);
  } 
}

onProgressUpdate(int current) {
     updateProgressBar(current);
}

生成Runnable并使其在触发时将无敌标志翻转为false可能更简单。

mHandler = new Handler() (during onCreate)
notInvincible = true;

-- get damaged --
if(damaged && notInvincible ){
  notInvincible = false;
  mHandler.postDelayed(new Runnable(){ void run() { notInvincible = true; }},DELAYTIME);
}

但是AsyncTask也可以让您做到这一点。

进行此类操作的常用方法是计算帧时间(自上一帧以来的时间)。 有了这个时间,您就可以使所有动作都与时间相关,并可以处理这些计时器之类的东西。
对于这样的碰撞,您需要将自上次命中以来的时间添加到玩家类中。 此属性的每一帧都与帧时间相加。 然后,您可以检查自上次碰撞以来的时间。 命中后,您可以将计时器设置回零。 不涉及线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM