移除glClear后的LibGdx怪异效果

时间:2018-10-30 20:25:02

标签: java android libgdx

我想删除glClear,以便可以对一个对象进行动画处理,并且当它在屏幕上移动时,它会显示动画效果的图像(如果包含glClear则不会显示)。它可以在模拟器上运行,但是当我在手机上插入时就可以运行。我认为这一定是dpi的事情,我能做些什么吗?

screenshot of my phone

@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 :(得分:1)

您的错误是您在渲染循环中创建了FrameBuffer。顺便说一句,您每帧泄漏一次。在丢失引用之前,必须始终处置FrameBuffer。

在模拟器上,内存的回收方式一定导致您意外地获得了想要的东西。但是现在,您正在绘制到前一帧的fbo,然后使用新分配的FrameBuffer覆盖参考,假设我假设您要在屏幕上绘制的每一帧。