当前位置: 首页 > 知识库问答 >
问题:

桌面应用上的libgdx屏幕闪烁

夏侯英纵
2023-03-14

我目前正在为我的libgdx游戏开发一个简单的加载屏幕,但是它有一个问题。加载屏幕完美地工作在android项目,但当它涉及到桌面版本它不工作。目前,加载屏幕应该显示“加载”-

渲染(浮点增量)函数:

float updateTextTime = 0;
@Override
public void render(float delta) {
    if (updateTextTime >= 1){                       //check to see if it has been a second
        if (periods == 0){
            Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);   //clears the buffer bit 
        }

        textBatch.begin();                          
        font.draw(textBatch,loading.substring(0,7+periods),(Gdx.graphics.getWidth()/2)-(textwidth/2),(Gdx.graphics.getHeight()/2)+(textheight/2));
        if (periods < 3){
            periods += 1;
        }else{
            periods = 0;
        }
        textBatch.end();
        updateTextTime = 0;
    }else{
        updateTextTime += delta;                    //accumlate 
    }
}

以及show()函数:

    @Override
public void show() {
    textBatch = new SpriteBatch();
    font = new BitmapFont(Gdx.files.internal("fonts/ArmyChalk.fnt"), Gdx.files.internal("fonts/ArmyChalk.png"),false);
    if (game.AppTypeMine == ApplicationType.Android){
        font.scale(2.0f);
    }
    textwidth = font.getBounds(loading).width;
    textheight = font.getBounds(loading).height;
}

最终解决方案:更改渲染()函数:公共无效渲染(浮点增量){

    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    textBatch.begin();                          
    font.draw(textBatch,loading.substring(0,7+periods),(Gdx.graphics.getWidth()/2)-(textwidth/2),(Gdx.graphics.getHeight()/2)+(textheight/2));
    textBatch.end();

    if (updateTextTime >= 0.5){                         //check to see if it has been a second
        if (periods < 3){
            periods += 1;
        }else{
            periods = 0;
        }
        updateTextTime = 0;
    }else{
        updateTextTime += delta;                    //accumlate 
    }
}

共有1个答案

姜胤
2023-03-14

你应该总是在渲染回调中渲染一些东西。

您可能会看到双缓冲问题(OpenGL无法判断您没有在当前帧缓冲区中绘制任何内容,因此它最终会渲染留在其中的任何内容)。

更改代码,以便始终调用字体。绘制调用。我想你可以移动textBatch。begin()字体。draw(),和textBatch。end()在初始if/else块之外调用。

如果不希望经常调用渲染,可以将Libgdx切换到非连续渲染模式(但需要找到一个钩子,每隔一秒左右将渲染调用重新启动)。看见http://bitiotic.com/blog/2012/10/01/enabling-non-continuous-rendering-in-libgdx/.

 类似资料:
  • 多亏了我在这个论坛上解决其他问题的帮助,我成功地推进了我的项目,但另一个障碍出现在我的道路上。 我有麻烦在libgdx java实现多个屏幕。我想知道如何实现多个屏幕(一个用于主菜单,一个用于播放,一个用于加载屏幕,...)。 关于我应该如何构造我的屏幕类的一个例子或一些解释将非常有帮助。我试着实现我自己的屏幕管理器,但不太顺利...还有一些关于我应该如何处理屏幕的提示,因为每次从主菜单到播放或选

  • 因此,我正在制作一个游戏,在60秒结束时,我想让屏幕改变颜色并显示一些结束文本。我这样设置计时器: 屏幕上显示的很好,但是当结束屏幕出现时,它会在原来的白色屏幕和结束屏幕之间闪烁。由于某种原因,如果我在屏幕上挥动鼠标,它不会闪烁。 “end”是我的游戏中的文本变量 如果这有帮助的话,这也是我在结尾的部分 有没有一种方法可以使它稳定地出现,而不必更改计时器?

  • 实现屏幕闪烁效果,有点类似拍照闪烁时的flash light。 [Code4App.com]

  • 在libGDX中切换屏幕似乎有问题。它会切换到游戏屏幕,但不会切换回主屏幕,也不会切换到屏幕上的游戏。我的游戏课: 我的GameScreen类(实现屏幕): 这就是我如何更改屏幕(不工作): 你可以在这里找到全部来源。

  • 我正在使用LWJGL 2.8.5开发一个3D可视化应用程序。在阅读了项目主页上的第一个教程后,我还阅读了一本OpenGL书籍,进行了更深入的分析。我看到OpenGL中的典型过程是在init函数中绘制场景,然后简单地在一个循环中调用显示的更新。 但是,当我尝试使用LWJGL时,我在显示屏中得到了闪烁效果。消除闪烁的唯一方法是在显示更新周期中重绘场景。为什么会发生这种情况? 为了更好地解释我的问题,我

  • 我显示记分板的代码总是闪烁,因为我将背景设置为白色。但我想让这一切停止。那么,有没有一种方法可以让pygame在不更新显示的情况下完成所有这些绘图和填充,并且当绘图完成时,它会显示新的结果,这样我就不必看到每一步,从而不必闪烁?