在我的游戏中,我正在绘制一个 scene2dStage
使用自定义世界坐标系。
然后,我想绘制一个调试 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);
}
The Stage
设置自定义视口:
public GameStage(GameDimensions dimensions, OrthographicCamera camera) {
// mapWith will be smaller than screen width
super(new FitViewport(dimensions.mapWidth, dimensions.mapHeight, camera));
...
}
The 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);
}
问题是,即使我没有参考舞台的世界系统或其相机,而是严格使用像素值和相应的投影矩阵,文本也会出现在舞台视口的右上角,即smaller比屏幕。我希望它看起来与屏幕角落的舞台分离。
我可以将问题归结为创建Stage
实例本身;停下来画它是不够的。我实际上必须删除对super(new FitViewport(...))
以防止这种情况发生。
这让我相信我需要以某种方式重置渲染管道的视口before我渲染 UI 叠加层吗?我该怎么做呢?