我想删除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();
}
答案 0 :(得分:1)
您的错误是您在渲染循环中创建了FrameBuffer。顺便说一句,您每帧泄漏一次。在丢失引用之前,必须始终处置FrameBuffer。
在模拟器上,内存的回收方式一定导致您意外地获得了想要的东西。但是现在,您正在绘制到前一帧的fbo
,然后使用新分配的FrameBuffer覆盖参考,假设我假设您要在屏幕上绘制的每一帧。