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