我正在为Android编写游戏,我遇到的问题是,当我与敌人发生碰撞时,我的健康栏会直接向下射击。
我想让它每秒只能注册两次点击。截至目前,它似乎在1-2秒内经历了50帧动画。
请告诉我如何解决问题。
谢谢!
答案 0 :(得分:2)
在一段时间之后运行某些东西的最佳解决方案是使用TimerTask。例如,此代码运行于2011年12月31日。
Timer timer = new Timer();
timer.schedule(new TimerTask(
public void run() {
System.out.println("done");
}),
new Date(2011, 12, 31));
答案 1 :(得分:2)
当最后一次碰撞发生在你的玩家对象中时,如何存储时间戳,并在检测到碰撞时将当前时间与它进行比较?如果有足够的时间,那么减少健康。这样您就不会受到可能的波动帧率的影响。
答案 2 :(得分:0)
将作业放入AsyncTask
,其中doInBackground()
方法倒计时,发送进度更新,然后休眠一小段时间。
伪代码:
doInBackground(int howMuch) {
while (howMuch > 0 ) {
publishProgress(howMuch);
Thread.sleep(1000 / howMuch);
}
}
onProgressUpdate(int current) {
updateProgressBar(current);
}
答案 3 :(得分:0)
甚至可以更简单地制作一个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也允许你这样做。
答案 4 :(得分:0)
执行此类操作的常用方法是计算帧时间(自上一帧以来的时间)。有了这个时间,你可以让所有动作都依赖于时间,也可以处理这些定时器之类的东西 对于这样的碰撞,你可以使用自上次击中后的时间为你的玩家类添加一个属性。每个帧此属性都与帧时间相加。然后,您可以检查自上次碰撞以来的时间。点击后,您可以将计时器设置回零。没有线程参与。