Странный эффект LibGdx после удаления glClear - PullRequest
0 голосов
/ 30 октября 2018

Я хотел удалить glClear, чтобы я мог анимировать объект, и, когда он перемещается по экрану, он показывает изображения, которые анимируются, чего не было бы, если бы я включил glClear. Он работал на эмуляторе, но когда я вставляю в телефон, он делает это. Я подумал, что это должно быть dpi, я могу что-нибудь сделать?

скриншот моего телефона

@Override
public void render(float delta) {
    fbo.begin();
    fbo = new FrameBuffer(Pixmap.Format.RGBA8888, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
    if (!deckBuilder.isPlayingAnimation()){
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    }
    Gdx.gl.glClearColor(39/255f, 39/255f, 198/255f, 1);

    stage.act();
    stage.draw();

    if (timer.getUserObject().equals("reset"))
    {
        timer.setUserObject("");
        totalTime = 0;
    }
    if (minutes < 60 || countTime) {
        deltaTime = Gdx.graphics.getRawDeltaTime(); //You might prefer getRawDeltaTime()

        totalTime += deltaTime; //if counting down

        minutes = ((int) totalTime) / 60;
        seconds = ((int) totalTime) % 60;
        timer.setText(("" + (100 + minutes)).substring(1) + ":" + ("" + (100 + seconds)).substring(1));
    }
    else
    {
        if (!setConstantTime)
        {
            setConstantTime = true;
            timer.setText("#!#%&");
        }
    }
    fbo.end();
}

1 Ответ

0 голосов
/ 31 октября 2018

Ваша ошибка в том, что вы создаете FrameBuffer в цикле рендеринга. Кстати, вы пропускаете их один раз за кадр. FrameBuffer всегда должен быть удален, прежде чем вы потеряете ссылку.

В вашем эмуляторе способ рециркуляции памяти должен был привести к тому, что вы случайно получили то, что хотели. Но сейчас вы рисуете на fbo предыдущего кадра, а затем перезаписываете ссылку вновь выделенным FrameBuffer для каждого кадра, который, как я полагаю, вы рисуете на экране.

...