根据视口和相机绘制纹理
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 中,它会在调整屏幕大小时自动重新定位。所以方块的工作方式与屏幕顶部的分数完全一样。
我无法绘制我的纹理,因此无法根据屏幕分辨率调整它们的大小。
我正在使用 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 中,它会在调整屏幕大小时自动重新定位。所以方块的工作方式与屏幕顶部的分数完全一样。