如何在libgdx中根据屏幕分辨率缩放精灵?

16
我正在尝试将纹理缩放以适应屏幕宽度。这是我尝试过的方法,但它只是重复纹理。它没有将其缩放。
在init方法中:
TextureLoader.TextureParameter param = new TextureLoader.TextureParameter();
param.minFilter = Texture.TextureFilter.MipMapLinearLinear;
param.genMipMaps = true;
param.wrapU = Texture.TextureWrap.ClampToEdge;
param.wrapV = Texture.TextureWrap.ClampToEdge;
manager.load("textures/texture.png", Texture.class, param);
在渲染方法中:
Texture tex = manager.get("textures/texture.png", Texture.class);
float scale = (float)( (float)Gdx.graphics.getWidth() / (float)(tex.getWidth()));

batch.begin();
Sprite s = new Sprite(tex, 0,0,tex.getWidth(),tex.getHeight());

s.setPosition(0, 0);
s.setOriginCenter();
//s.setScale(scale);
s.setSize(Gdx.graphics.getWidth(), scale * tex.getHeight());
s.setOrigin(0,0);
s.draw(batch);
batch.end();

有没有人知道我做错了什么? 


看起来你正在使用虚构的“像素”单位,请阅读此文:http://blog.xoppa.com/pixels - Xoppa
为什么这个如此复杂? - Z0q
什么是复杂的? - Xoppa
我需要创建一个独立的相机或视口吗?为什么libgdx中没有像setScale()这样简单的函数?我的意思是,3D对象可以按照我想要的方式进行缩放,但2D似乎会变得臃肿。我也觉得这篇文章很难理解。 - Z0q
@Z0q,关于camera和/或Viewport并没有什么复杂的地方。一旦你理解了它们,它们可以让很多事情变得更容易。你必须记住的一件事是:你不想使用像素。设备有不同的分辨率,你真的不想拥有一个分辨率依赖性的游戏,特别是当你正在为Android设备开发时!所以阅读camera/viewport教程,你会看到它的优势。 - Robert P
@Springrbua 你能给我提供一个案例解决我的问题吗?我想StretchViewport可能适合我的需求。但我似乎无法让它工作。谢谢 - Z0q
1个回答

2
显然这是因为我使用了mipmaps。没有使用mipmapping,精灵会适当地缩放。
param.minFilter = Texture.TextureFilter.MipMapLinearLinear;
param.genMipMaps = true;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接