在调整大小时缩放 libgdx 中的纹理

Scaling textures in libgdx on resizing

我将我的纹理设置为每次调用渲染函数时都将大小调整为 Gdx.graphics.getWidth()Gdx.graphics.getHeight()。事实上,当我启动应用程序时,纹理设置为全屏(如我所愿)。但是当我改变应用程序的大小时,纹理以某种愚蠢的方式绘制,而我希望它一直全屏显示。

代码如下:

    package com.leopikinc.bobdestroyer;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.graphics.GL20;

import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class BobDestroyer extends ApplicationAdapter {
    SpriteBatch batch;
    Texture mainscreen;
    Music intromusic;
    float VOLUME;

    @Override
    public void create () {
        VOLUME = 1f;
        batch = new SpriteBatch();
        mainscreen = new Texture(Gdx.files.internal("data/FirstLevel.png"));
        intromusic = Gdx.audio.newMusic(Gdx.files.internal("data/IntroMusic.mp3"));
        intromusic.setLooping(true);
        intromusic.setVolume(VOLUME);
        intromusic.play();
    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 1, 1, 0);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(mainscreen, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        batch.end();
    }

    @Override
    public void resize(int width, int height){
    }
}

Nice way

Dumb way

你应该使用viewport来处理不同的纵横比。

这里是StretchViewport可以显示全屏纹理的例子。

public class MyGdxGame extends ApplicationAdapter {
    SpriteBatch batch;
    Texture img;
    private Viewport viewport;
    private Camera camera;

    @Override
    public void create() {
        camera = new OrthographicCamera();
        viewport = new StretchViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        viewport.setCamera(camera);
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");

    }

    @Override
    public void render() {
        camera.update();
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        batch.begin();
        batch.draw(img, 0, 0, viewport.getWorldWidth(),viewport.getWorldHeight());
        batch.end();
    }

    @Override
    public void resize(int width, int height) {
        viewport.update(width, height);

    }
}

更改屏幕尺寸之前:

更改屏幕尺寸后: