我正在创建一个使用libgdx的游戏,我希望在桌面上以更高的分辨率运行,但是当我在较低分辨率的android上运行它时,我希望它能正确地缩小所有内容。我已经读过,最好的方法是不要使用像素完美的相机,而是使用世界坐标,但我不知道如何正确地做到这一点。
这是我现在的代码:
@Override
public void create() {
characterTexture = new Texture(Gdx.files.internal("character.png"));
characterTextureRegion = new TextureRegion(characterTexture, 0, 0, 100, 150);
batch = new SpriteBatch();
Gdx.gl10.glClearColor(0.4f, 0.6f, 0.9f, 1);
float aspectRatio = (float)Gdx.graphics.getWidth() / (float)Gdx.graphics.getHeight();
camera= new OrthographicCamera(aspectRatio, 1.0f);
}
@Override
public void render() {
GL10 gl = Gdx.graphics.getGL10();
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
camera.update();
camera.apply(gl);
batch.setProjectionMatrix(camera.combined);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
draw();
}
private void draw() {
//batch.getProjectionMatrix().set(camera.combined);
batch.begin();
batch.draw(characterTextureRegion, 0, 0, // the bottom left corner of the box, unrotated
1f, 1f, // the rotation center relative to the bottom left corner of the box
0.390625f, 0.5859375f, // the width and height of the box
1, 1, // the scale on the x- and y-axis
0); // the rotation angle
batch.end();
}
我使用的纹理是256x256,实际图像是100x150。
这是我在运行游戏时获得的结果:http://i.imgur.com/HV9Bi.png
渲染的精灵是巨大的,考虑到这是原始图像:http://i.imgur.com/q1cZT.png
制作它的最佳方法是什么,以便精灵以原始大小渲染,同时仍能保持在不同分辨率下玩游戏时能够正确缩放的能力?
我只找到了两个我不喜欢的解决方案。
答案 0 :(得分:4)
你有没有使用过Libgdx设置工具?使用它创建项目时,它会显示一个示例图像。无论你将屏幕更改为什么尺寸,它似乎都能保持正确的比例。
public class RotationTest implements ApplicationListener {
private OrthographicCamera camera;
private SpriteBatch batch;
private Texture texture;
private Sprite sprite;
Stage stage;
public boolean leonAiming = true;
@Override
public void create() {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
camera = new OrthographicCamera(1, h/w);
batch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("data/libgdx.png"));
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275);
sprite = new Sprite(region);
sprite.setSize(0.9f, 0.9f * sprite.getHeight() / sprite.getWidth());
sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);
sprite.setPosition(-sprite.getWidth()/2, -sprite.getHeight()/2); }....
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
sprite.draw(batch);
batch.end();
答案 1 :(得分:0)
首先,你需要修复世界的界限(我的意思是你的游戏)。在那个世界中,只有你的演员(游戏角色)应该玩。如果您正在跨越边界,请使用相机进行管理,例如向上,向下,向左和向右显示。