8

我有一个游戏(比如超级跳投,这个游戏是一个跳跃游戏),我们的角色有生命。与敌人碰撞后,他的生命减少。我想在 1 秒后计算碰撞。我的意思是在这 1 秒内,如果我的角色与敌人接触,什么都不会发生,他会继续前进。为此,我在 GameScreen 类中定义了一个布尔变量,名称为“collision”,在 Wolrd 类中定义另一个,名称为“collBirds”。在与敌人碰撞一次接触后,collBirds 变为 true。但我想在 1 秒碰撞后更改为假。我使用了一些东西,比如 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;
        }
    }
4

3 回答 3

38

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

示例用法:

float delay = 1; // seconds

Timer.schedule(new Task(){
    @Override
    public void run() {
        // Do your work
    }
}, delay);
于 2013-04-19T09:13:37.697 回答
7

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

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

timeSinceCollision += deltaTime;
if(timeSinceCollision > 1.0f) {
    // do collision stuff
} else {
    // ignore the collision
}
于 2012-05-29T12:30:19.520 回答
0

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

于 2012-05-29T11:51:43.793 回答