在libgdx游戏中设置延迟

我有一个游戏(如超级跳投,这个游戏是一个跳跃游戏),我们的角色有生命。 在与敌人发生碰撞后,他的生命减少了。 我想在1秒后计算碰撞。 我的意思是在这1秒内,如果我的角色与敌人接触,没有任何事情发生,他继续他的方式。 为此,我在我的GameScreen类中定义一个布尔变量,名为“collision”,另一个在Wolrd类中定义名称“collBirds”。 一次与敌人碰撞接触后,collBirds变为true。 但我想在1秒后将collistion改为false。 我使用System.currentTimeMillis()和“for loop”之类的东西,但没有任何反应。 我在java中不太好。

这是我的条件:

if(World.collBirds == true && collition == false){ life -= 1; lifeString = "Life : " + life; World.collBirds = false; collition = true; for (??? "need to stay here for 1 sec" ???) { collition = false; } } 

在某些情况下,您还可以使用com.badlogic.gdx.utils.Timer

用法示例:

 float delay = 1; // seconds Timer.schedule(new Task(){ @Override public void run() { // Do your work } }, delay); 

发生第一次碰撞时,设置float timeSinceCollision = 0;

然后每个循环,您需要将自上次检查后的时间添加到变量,并检查它是否超过一秒。

 timeSinceCollision += deltaTime; if(timeSinceCollision > 1.0f) { // do collision stuff } else { // ignore the collision } 

如果你想在同一个线程中执行此操作,可以使用Thread.sleep()。 但在这种情况下,你的当前线程将冻结,如果这是单线程游戏,那么你的整个游戏将会冻结。 如果你不希望你的游戏冻结1秒,那么你应该产生线程并在该线程中调用睡眠并在睡眠后更改标志