2012-05-29 175 views
7

我有一个游戏(如超级跳线,这个游戏是一个跳跃的游戏),我们的角色有生命。与敌人碰撞后,他的生命减少。我想在1秒后计算碰撞。我的意思是在这1秒内,如果我的角色与敌人接触,什么也没有发生,他继续他的方式。 为此,我在我的GameScreen类中定义了一个布尔变量,名称为“collision”,另一个在Wolrd类中名为“collBirds”。经过一次与敌方碰撞和collBirds接触后变为真。但是我想在1秒后碰撞改变为假。我使用了几个东西像System.currentTimeMillis()和“for循环”,并没有发生任何事情。我在Java中并不擅长。设置延迟libgdx游戏

这是我的情况:

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; 
     } 
    } 
+1

退房[这个问题](HTTP:/ /gamedev.stackexchange.com/questions/25001/waiting-specific-time-to-increase-sound-libgdx) –

+0

tnx您的回复。我阅读并使用它。但我在我的游戏中改变了一些东西,最后它奏效了。 – Hosein

回答

0

如果你想这样做,在同一个线程比你可以使用Thread.sleep()方法。但在这种情况下,您当前的线程将会冻结,如果这是单线程游戏,那么您的整个游戏将会冻结。如果你不想让你的游戏冻结1秒,比你应该产卵的线程和线程调用睡眠和睡眠后,换旗

6

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

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

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

它只是第一次工作,碰撞后一点减少生活,但在其他时间,什么也没有发生...... – Hosein

+3

呃,重置timeSinceCollision //碰撞东西分支? – Ludevik

32

在某些情况下,你也可以想使用com.badlogic.gdx.utils.Timer

用法示例:

float delay = 1; // seconds 

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