我有一个游戏(如超级跳投,这个游戏是一个跳跃游戏),我们的角色有生命.与敌人发生碰撞后,他的生命减少了.我想在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;
}
}
Run Code Online (Sandbox Code Playgroud)
Glo*_*ogo 33
在某些情况下,您还可以使用com.badlogic.gdx.utils.Timer
用法示例:
float delay = 1; // seconds
Timer.schedule(new Task(){
@Override
public void run() {
// Do your work
}
}, delay);
Run Code Online (Sandbox Code Playgroud)
发生第一次碰撞时,设置a float timeSinceCollision = 0;
然后每个循环,您需要将自上次检查后的时间添加到变量,并检查它是否超过一秒.
timeSinceCollision += deltaTime;
if(timeSinceCollision > 1.0f) {
// do collision stuff
} else {
// ignore the collision
}
Run Code Online (Sandbox Code Playgroud)
小智 0
如果你想在同一个线程中执行此操作,则可以使用 Thread.sleep()。但在这种情况下,您当前的线程将冻结,如果这是单线程游戏,则整个游戏将冻结。如果您不希望游戏冻结 1 秒,那么您应该生成线程并在该线程中调用 sleep 并在 sleep 后更改标志
| 归档时间: |
|
| 查看次数: |
24378 次 |
| 最近记录: |