Как приостановить SpriteAnimation в libGDX с помощью кнопки, чтобы иметь возможность просматривать текущий кадр при нажатии кнопки паузы?
Я пытался приостановить анимацию с помощью кнопки паузы / возобновления, выполнив это:
public static int gameStatus = 1;
public int gamePaused = 0;
public int gameRunning = 0;
public void create(){
gameRunning = 1;
//.. code
}
public void render(){
if(gameStatus == gameRunning){
//some code ..
pause.setClickListener( new ClickListener() {
@Override
public void click(Actor actor, float x, float y) {
System.out.println("pause is pressed");
//to stop the animation at a particular frame
spriteBatch.begin();
spriteBatch.draw(currentFrame, 100, 100);
spriteBatch.end();
if(gameStatus!=gamePaused)
{
gameStatus = gamePaused;
}
else
{
gameStatus = 1;
}
}
});
//rest of my render animation code ..
}
}
Но на рабочем столе он показывает 3/4 текущего кадра и 1/4 следующего кадра. Есть идеи почему? И в Android он ведет себя так, как будто все изображение дрожит. Мне интересно, может быть, потому, что он вызывает render() снова и снова. Я не понимаю, почему есть разница в выходе в Android и настольной версии. Разве они не должны быть одинаковыми? Я думаю, что есть некоторая проблема индексации между ними. Кто-нибудь еще испытывал ту же проблему? Любые предложения или правильный способ приостановить анимацию или ссылку на учебник будут очень полезны. Спасибо.
1 ответ
Я сделал реализацию pause без каких-либо мерцающих проблем, как это было, просто удалив spriteBatch.draw() из метода pause и используя булеву переменную, чтобы знать, когда отображать, а когда не отображать, чтобы приостановить анимацию. Вот как я это сделал (на тот случай, если у кого-то возникли те же проблемы):
private boolean isPlaying = true;
@Override
public void pause() {
Gdx.app.log("pause():", "pausing the app");
if( isPlaying )
{
isPlaying = false;
}
else
{
isPlaying = true;
}
}
@Override
public void render() {
Gdx.app.log("123123", (!seekBar.isDragging())+"");
if( isPlaying )
// .. do the animation..
}