How to scale sprites in libgdx according to screen resolutions?
Asked Answered
R

1

16

I am trying to scale the texture to fit the screen width. This is what I tried, but it simply repeats the texture. It does not scale it.

In the init method:

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);

In the render method:

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();

Does anyone have an idea what I am doing wrong? 

Rosalindarosalinde answered 28/12, 2015 at 16:36 Comment(6)
Looks like you are using imaginary "pixel" units, read this: blog.xoppa.com/pixelsNeiman
Why is this so complicated?Rosalindarosalinde
What is complicated?Neiman
Well, do I need to create a separate camera or viewport? Why isn't there a simple function like setScale() in libgdx? I mean, 3D objects simply scale the way I want, but 2D seems to make it bloated. I find the article difficult to understand too.Rosalindarosalinde
@Rosalindarosalinde there is nothing complicated about camera and/or Viewports. Once you understood them they can make many things a lot easier. One thing you always have to remember: You DON'T want to use pixels. Devices have different resolutions and you really don't want to have a resolution-dependent game, especially not, when you are developing for android devices! So read the camera/viewport tutorials and you will see it's advantageJuvenilia
@Springrbua Could you please provide an example solution for my case? I think StretchViewport would suit my needs. But I can't seem to get it working. ThanksRosalindarosalinde
R
2

Apparently this happened because I was using mipmaps. Without mipmapping, the sprites scale appropriately.

param.minFilter = Texture.TextureFilter.MipMapLinearLinear;
param.genMipMaps = true;

Rosalindarosalinde answered 30/12, 2015 at 19:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.