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

Libgdx不会在requestRendering上呈现

乜华翰
2023-03-14
do {
    checkIfThereAre3BlocksTogether();
    removeThoseBlocks();
    updateTheBoardPieces();

    showTheBoard();
} while (thereWhereBlockRemoved);

我面临的问题是,我不能让这个循环的每个迭代之间的板得到呈现。我只得到这个循环的最终结果。

我试图在每次迭代之前创建一个thread.sleep(2*1000),以便给渲染系统时间来绘制我的板,但它工作了。

另一个解决办法是调用

 Gdx.graphics.setContinuousRendering(false); 
 Gdx.graphics.requestRendering();
@Override
public void render(float delta) {

    System.out.println("Rendering");

    // Background rendering
    Gdx.gl.glClearColor(0.8f, 0.8f, 0.8f, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);   

    // World rendering
    renderer.render();
}

共有1个答案

赫连宏伯
2023-03-14

Libgdx将每帧调用其render回调一次。您无法让Libgdx在单个render回调中绘制多个帧,因此while循环将始终运行到完成,然后才将下一个帧呈现到屏幕上。

您需要从while循环切换到一种希望在更新过程中多次调用render的方法。通常,状态机是思考这个问题的好方法。但在您的具体情况下,我认为您可以完全摆脱while循环。(实际上,render方法已经处于无限while循环中):

public void render(float delta) {
    ...
    if (checkIfThereAre3BlocksTogether()) {
       removeThoseBlocks();
       updateTheBoardPieces();
    }
    ...
}

现在您可能会遇到这样的问题,即当您运行这些更新时,您将希望阻止播放机对系统进行新的更改。您将需要跟踪“模式”您的游戏是在(接受更新或运行通过组合),并推迟检查输入,直到您完成运行通过组合。

 类似资料:
  • 我正在编程一个小游戏,它是基于瓷砖的。但当我渲染它的时候,有时那些瓷砖之间的一个小空间是可见的,(绿色)背景是暴露的(可以在视频中看到)。 我想知道,是否有一些双缓冲技术,可以解决这个bug,但我读到,双缓冲已经实现了。

  • 我想我不明白render方法是如何工作的。 从我在网上读到的/在youtube教程上看到的,我发现render方法是一个循环函数,您可以使用它来保持游戏的更新和读取用户的输入。当您想要在屏幕中绘制一些东西时,您可以使用此方法,并且在绘制任何东西之前清除屏幕。 但是如果我想要静止地绘制一些东西,那么在render方法之外绘制它不是更好吗(这样计算机就不必多次清除屏幕并重新绘制所有东西)?我错过了什么

  • 我正在java中使用Graphics2D和Canvas类创建一个游戏。 当我运行程序时,一个JFrame出现在我的第一个监视器上,并且没有任何问题。然而,当我将JFrame拖到第二个监视器上时,它会变成灰色,并且将停止呈现任何内容,然后当我将它拖回到第一个监视器上时,程序继续呈现。 我的游戏循环调用我的类中的方法,该类扩展了,这是draw方法。

  • 我的表格代码: 我的视图代码: 堆栈跟踪: 环境: 请求方法:获取请求URL: Django版本:1.4 Python版本:2.7。2个已安装的应用程序:('django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.sites','django.contrib.messa

  • 此外,当我尝试在Netbeans中创建一个新的Android项目时(而不是在libgdx,只是通过创建一个新的Android项目),它工作得非常好。 Libgdx/Android-SDK通信似乎有问题,但在网上搜索答案后,我似乎想不通! 如果需要,我可以贴代码。 编辑:我肯定是改了什么东西,但现在错误有点不同。不是“Android.os不存在”,而是“在Android.os中找不到类包”。以下是我

  • 我最近开始了我的第一个libGDX游戏,一切都进行得很好,所有的东西都呈现得很好,但是大约一分钟后什么都没有呈现,呈现调用仍然被发出,并且spritebatch工作得很好,我只是留下了一个黑屏,我甚至把'gl clearcolor()'改成了但我仍然留下了一个黑屏。我不知道这会是什么。 我的主要类: 编辑:我们已经确定,经过一段时间SpriteBatch渲染一个黑色屏幕的红色清晰颜色,它也停止渲染