Timer 如何使用计时器创建';准备好';在我的游戏开始时延迟?

Timer 如何使用计时器创建';准备好';在我的游戏开始时延迟?,timer,libgdx,delay,Timer,Libgdx,Delay,因此,当创建我的游戏的某个级别时,enum游戏状态为state.intro,在该状态下,游戏会被指示在将状态更改为state.playing之前进行3秒钟的倒计时,然后您可以开始游戏,屏幕开始移动。在按下“播放”按钮和实际播放之间,给玩家3秒钟的准备时间。不幸的是,它只注册前两个级别。无论我从哪个级别开始,第三个级别在开始时都不会有这种延迟,我也不知道为什么。为了绘制更好的图片,下面是我的渲染方法中的一些代码: if(gameState == STATE.intro) {

因此,当创建我的游戏的某个级别时,enum游戏状态为state.intro,在该状态下,游戏会被指示在将状态更改为state.playing之前进行3秒钟的倒计时,然后您可以开始游戏,屏幕开始移动。在按下“播放”按钮和实际播放之间,给玩家3秒钟的准备时间。不幸的是,它只注册前两个级别。无论我从哪个级别开始,第三个级别在开始时都不会有这种延迟,我也不知道为什么。为了绘制更好的图片,下面是我的渲染方法中的一些代码:

  if(gameState == STATE.intro) {                //at the start of the level, wait 3 seconds for the player to get ready
                getReadyText.draw(batch, "GET READY!", centerX - (Gdx.graphics.getWidth()/10), screenCeiling-(Gdx.graphics.getHeight()/2));
                introDelay(); 
            }

 public void introDelay() {
    //creates a delay from when the level loads, and you start playing 

    if(intro) {
        intro = false;

        Timer.schedule(new Task() {

            @Override
            public void run() {
                gameState = STATE.playing;
            }
        }, 3);      //3 seconds
    }

}

在创建级别时,intro是一个单独的布尔值,设置为true。我使用它来确保计时器只创建一次,而不是在游戏状态处于“简介”模式的每一帧。另请注意introDelay()不在渲染内。有什么想法吗?

你确定你的代码第三次进入if(intro){…}语句吗?此外,我同意Kush的观点,我建议使用一个计数器,该计数器在每帧中随deltaTime上升,而不是使用Timer.schedule函数。是这样的

 public void render(float deltaTime) {
     stateTime += deltaTime;
     ...
     switch(gameState)
     {
          case State.STATE_INTRO:
               getReadyText.draw(batch, "GET READY!", centerX - (Gdx.graphics.getWidth()/10), screenCeiling-(Gdx.graphics.getHeight()/2));
               if(stateTime > 3) {
                   setState(State.STATE_PLAY);
               }
               break;
          case State.STATE_PLAY:
               //your code for playing state;
               break;
     }
}

public void setState(State state) {
    stateTime = 0;
    gameState = state;
}

也许你没有重置状态?顺便说一句,我会建议使用method而不是Timer来避免延迟的线程竞争条件。但是我想在延迟期间绘制地图,这样玩家就知道在一开始会发生什么