gpt4 book ai didi

java - Libgdx 不会在 requestRendering 上呈现

转载 作者:行者123 更新时间:2023-11-30 03:06:57 25 4
gpt4 key购买 nike

我正在制作一个基于三消的游戏,每次用户在棋盘上移动一个棋子时,游戏都会执行以下循环:

do {
checkIfThereAre3BlocksTogether();
removeThoseBlocks();
updateTheBoardPieces();

showTheBoard();
} while (thereWhereBlockRemoved);

这主要是因为当你移除一些棋子的时候,掉落的棋子有可能组合成一个等等...

我面临的问题是,我无法让电路板在此循环的每次迭代之间得到渲染。我只得到这个循环的最终结果。

我尝试的是在每次迭代之前创建一个 Thread.sleep(2 * 1000),以便为渲染系统留出时间来绘制我的板,但它起作用了。

另一种解决方法是调用

 Gdx.graphics.setContinuousRendering(false); 

然后调用:

 Gdx.graphics.requestRendering();

在 showTheBoard() 函数中...我在渲染函数中放置了一些 system.out.println 以便知道它是否被调用,并且我意识到渲染仅在 do/while 循环退出时被调用。 (尽管是这种情况,render 还是被正确调用了)

为了以防万一,在我的 Screen 实现中,此时我的渲染函数中有这段代码:

@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();
}

我认为问题可能与线程处理有关。我不明白 libgdx 在不同的线程中进行渲染,但这种情况就像我只有一个线程必须在渲染之前等待计算结束......

如果有人能给出一些关于可能发生的事情的提示,我将不胜感激!

最佳答案

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

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

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

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

关于java - Libgdx 不会在 requestRendering 上呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com