根据视口和相机绘制纹理

Draw texture according to viewport and camera

我无法绘制我的纹理,因此无法根据屏幕分辨率调整它们的大小。

我正在使用 ScreenViewport(因为我希望我的字体平滑且没有失真)。

float w = Gdx.graphics.getWidth();                                       
float h = Gdx.graphics.getHeight();   
gameCam = new OrthographicCamera(2f * h/w, 2f);
gamePort = new ScreenViewport(gameCam);

奇怪的是,无论相机的高度和宽度如何,结果都是一样的。

在调整大小的方法中,我尝试了很多东西:

@Override
public void resize(int width, int height) {
gamePort.update(width, height, true);
renderer.stage.getViewport().update(width, height, true);
gameCam.viewportWidth = width;
gameCam.viewportHeight = height;
gameCam.update();

float aspectRatio = (float) width / (float) height;
gameCam = new OrthographicCamera(2f * aspectRatio, 2f);
gameCam.update();

最后,在渲染方法中:

public void render() {                                              
    sb.setProjectionMatrix(cam.combined);   
    sb.draw(block.getTexture(), block.getPosition().x, block.getPosition().y, BLOCK_WIDTH, BLOCK_HEIGHT);

BLOCK_WIDTH 和 BLOCK_HEIGHT = 48 我的纹理是 512px,所以我希望它们更小。

如下图所示,当设备具有较大的分辨率时,即使我调整 window 的大小,纹理也保持相同的大小和位置。我对舞台顶部的 table 乐谱没有这个问题。

此处回答了有关调整精灵大小的问题:

How to resize a sprite in Libgdx?

所以不要使用 batch.draw(sprite,...),而是尝试 sprite.draw(batch)。

我严格使用 LibGDX 的舞台和演员,因为它使调整大小和定位组件(以及其他事情)变得非常容易。使用 ScreenViewport 时,我将组件的大小设置为屏幕大小的某个百分比。这可以完美地适应不同的屏幕尺寸。

例如,我没有将按钮硬编码为恰好 100 像素宽,而是将其设置为 Gdx.graphics.getWidth() * 0.10f,这会将按钮宽度设置为屏幕宽度的 10%,而不管屏幕分辨率。

你也可以对位置做同样的事情。不要将位置设置为 50 像素,而是将其设置为 Gdx.graphics.getWidth() * 0.5f,然后 x 位置将为屏幕宽度的 %5。

如果您的块要在某种网格中对齐,那么另一个定位选项是使用 LibGDX 图像而不是 Sprite。图像基于 Actor,它允许您将所有块放入 Table 中,它会在调整屏幕大小时自动重新定位。所以方块的工作方式与屏幕顶部的分数完全一样。