Java 使用Libgdx的纹理大小

Java 使用Libgdx的纹理大小,java,android,libgdx,Java,Android,Libgdx,这可能是个愚蠢的问题,但我需要一些帮助/解释。在libgdx中调整窗口大小时,无法正确调整纹理大小。我想保持我的纹理的外观,或者至少在较小的屏幕上缩小它们,比如在移动设备上。这是我的一个代码示例,我原来的窗口大小是600*700。我尝试了很多方法,但都不管用:\ 你能帮我吗?提前谢谢 public class GameScreen implements Screen { private World world; private int ppxX, ppxY; priva

这可能是个愚蠢的问题,但我需要一些帮助/解释。在libgdx中调整窗口大小时,无法正确调整纹理大小。我想保持我的纹理的外观,或者至少在较小的屏幕上缩小它们,比如在移动设备上。这是我的一个代码示例,我原来的窗口大小是600*700。我尝试了很多方法,但都不管用:\

你能帮我吗?提前谢谢

public class GameScreen implements Screen {

    private World world;
    private int ppxX, ppxY;
    private SpriteBatch batch;
    private OrthographicCamera camera;
    private float cameraX, cameraY;

    public GameScreen(World world) {
        this.world = world;
        camera = new OrthographicCamera();
    }

    public void show() {
        batch = new SpriteBatch();
    }

    @Override
    public void render(float delta) {
        world.update(delta);
        updateCamera();

        ppxX = Gdx.graphics.getWidth() / 600;
        ppxY = Gdx.graphics.getHeight() / 700;

        Gdx.gl.glClearColor(0f, 0f, 0f, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        batch.setProjectionMatrix(camera.combined);
        batch.begin();

        batch.draw(world.getTexture(), 0, 0, ppxX, ppxY);

        for (GameElement e : world.getListElements()) {
            e.update(delta);
            batch.draw(e.getTexture(), e.getPositionX()*ppxX, e.getPositionY()*ppxY, e.getWidth()*ppxX , e.getHeight()*ppxY );
        }

        batch.end();
    }

你在正确的轨道上,但有两件事你必须改变

  • 使用

  • 正确调整大小

    @Override
    public void resize(int width, int height) {
        this.viewport.update(width, height);
    }
    
  • 更新相机并使用世界单位进行渲染。不要犯以屏幕像素为单位的错误

    public void render(float delta) {
        this.camera.update();
        this.batch.setProjectionMatrix(this.camera.combined);
    
        this.batch.begin();
    
        // draw using WORLD_SIZE
    
        this.batch.end();
    }
    
  • public void render(float delta) {
        this.camera.update();
        this.batch.setProjectionMatrix(this.camera.combined);
    
        this.batch.begin();
    
        // draw using WORLD_SIZE
    
        this.batch.end();
    }