Как приостановить 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.. 
    }
Другие вопросы по тегам