gpt4 book ai didi

android - 在创建/渲染 scene2d 舞台后重置视口(viewport)

转载 作者:太空宇宙 更新时间:2023-11-03 10:19:24 24 4
gpt4 key购买 nike

在我的游戏中,我使用自定义世界坐标系绘制了一个 scene2d Stage

然后我想绘制一个调试 UI,上面有一些像 FPS 这样的文本,但只是使用屏幕坐标,即文本位于屏幕右上角的位置。我的主要渲染方法看起来像这样:

@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

gameStage.act(delta);
gameStage.draw();

debugInfo.render(delta);
}

Stage 设置自定义视口(viewport):

public GameStage(GameDimensions dimensions, OrthographicCamera camera) {
// mapWith will be smaller than screen width
super(new FitViewport(dimensions.mapWidth, dimensions.mapHeight, camera));
...
}

DebugInfo 呈现代码如下所示:

public DebugInfo() {
Matrix4 mat = new Matrix4();
mat.setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
batch.setProjectionMatrix(mat);
}

@Override
public void render(float delta) {
batch.begin();
font.setScale(2f);
drawText("FPS " + Gdx.graphics.getFramesPerSecond());
batch.end();
}

private void drawText(String text) {
final BitmapFont.TextBounds textBounds = font.getBounds(text);
textPos.x = Gdx.graphics.getWidth() - textBounds.width - MARGIN;
textPos.y = Gdx.graphics.getHeight() - MARGIN;
textPos.z = 0;
font.draw(batch, text, textPos.x, textPos.y);
}

问题是,尽管我没有提及舞台的世界系统或其相机,而是严格使用像素值和相应的投影矩阵,但文本出现在舞台视口(viewport)的右上角,即 < em>比屏幕小。我希望它看起来与屏幕角落的舞台分离。

我可以将问题归结为 Stage 实例本身的创建;停下来画它是不够的。实际上,我必须删除对 super(new FitViewport(...)) 的调用以防止这种情况发生。

这让我相信我需要以某种方式重置渲染管道的视口(viewport)我渲染 UI 覆盖之前?我该怎么做?

最佳答案

我的第一个答案是错误的。现在,当我查看 Viewport 源代码时,我可以看到它使用了 OpenGL 的 glViewPort。实际上它会影响所有后续的绘制调用。所以你必须在渲染你的东西之前用适当的尺寸调用 glViewport:

@Override
public void render(float delta) {
Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
batch.begin();
font.setScale(2f);
drawText("FPS " + Gdx.graphics.getFramesPerSecond());
batch.end();
}

关于android - 在创建/渲染 scene2d 舞台后重置视口(viewport),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26936952/

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