【问题标题】:set a delay in libgdx game在 libgdx 游戏中设置延迟
【发布时间】:2012-05-29 11:45:00
【问题描述】:

我有一个游戏(比如超级跳投,这个游戏是一个跳跃游戏),我们的角色有生命。与敌人碰撞后,他的生命减少。我想在 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;
        }
    }

【问题讨论】:

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

标签: java delay libgdx


【解决方案1】:

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

示例用法:

float delay = 1; // seconds

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 它只是第一次工作,碰撞后生命减少一点,但其他时候,什么都没有发生......
    • 嗯,重置timeSinceCollision in //do collision stuff branch?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 2023-03-19
      • 2019-10-09
      相关资源
      最近更新 更多