根据视口和相机绘制纹理

时间:2016-06-20 18:23:28

标签: libgdx textures viewport orthographic

我无法绘制纹理,以便根据屏幕分辨率调整其大小。

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

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

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

在resize方法中,我尝试了很多东西:

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

最后,在render方法中:

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所以我希望它们更小。

正如您在下图所示,当设备具有较高的分辨率时,即使我调整窗口大小,纹理也会保持相同的大小和位置。我对舞台上的乐谱表没有这个问题。

enter image description here

1 个答案:

答案 0 :(得分:1)

这里有一个关于调整精灵大小的问题:

How to resize a sprite in Libgdx?

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

我严格使用LibGDX的Stage和Actors,因为它可以非常轻松地调整组件和定位组件(以及其他内容)。使用ScreenViewport时,我将组件的大小设置为屏幕大小的一定百分比。这可以完美地扩展到不同的屏幕尺寸。

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

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

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

相关问题