gpt4 book ai didi

android - 如何使用 libgdx 创建一个正确缩放 Sprite /纹理的正交相机?

转载 作者:搜寻专家 更新时间:2023-11-01 08:13:05 25 4
gpt4 key购买 nike

我正在使用 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

渲染的 Sprite 是巨大的,考虑到这是原始图像:http://i.imgur.com/q1cZT.png

制作它的最佳方法是什么,以便 Sprite 以其原始大小呈现,同时仍然保持在不同分辨率下玩游戏时正确缩放游戏的能力?

我只找到了两个解决方案,这两个我都不喜欢。

  1. 如果我为相机使用像素坐标,图像会显示出它应有的样子,但是当我将它放在我的手机上以不同的分辨率时,它根本不会缩放。
  2. 我可以在绘制纹理区域时缩小它,但似乎有更好的方法,因为试图找出正确的数字来缩放它是非常乏味的。

最佳答案

您使用过 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();

关于android - 如何使用 libgdx 创建一个正确缩放 Sprite /纹理的正交相机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7780672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com