在调整大小时缩放 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){
}
}
你应该使用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);
}
}
更改屏幕尺寸之前:
更改屏幕尺寸后:
我将我的纹理设置为每次调用渲染函数时都将大小调整为 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){
}
}
你应该使用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);
}
}
更改屏幕尺寸之前: