hallo hallo
hallo hallo

Reputation: 21

Why is my background image stretched out in libGDX?

This is my first try in libGDX and I've not seen an issue like this before, googling didn't help either. What I'm trying to to display a background, Later on I'll make this move, but for me it was a great start to actually display the image. It displays, but it's streched out (See picture below)

enter image description here

And my code is:

private BombArrangement game;
private OrthographicCamera gameCamera;
private Viewport gamePort;
private Texture backGroundTexture;

public PlayScreen(BombArrangement game) {
    this.game = game;
    gameCamera = new OrthographicCamera();
    gamePort = new FitViewport(BombArrangement.V_WIDTH, BombArrangement.V_HEIGHT, gameCamera);

    backGroundTexture = new Texture("startbackground.png");
}

@Override
public void show() {

}

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    game.batch.begin();
    game.batch.draw(new TextureRegion(backGroundTexture, 0, 0, BombArrangement.V_WIDTH, BombArrangement.V_HEIGHT), 0, 0);
    game.batch.end();
}

@Override
public void resize(int width, int height) {
    gamePort.update(width, height);
}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void hide() {

}

@Override
public void dispose() {

}
}

I tried several things like textureregions, sprites and more but all of them give this result.

Upvotes: 1

Views: 927

Answers (2)

BlakkM9
BlakkM9

Reputation: 409

not exactly sure what your want to do but i use this to render my background in my main menu:

    //Camera
    camera = new OrthographicCamera();
    camera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    //Viewport
    ScreenViewport viewport = new ScreenViewport(camera); 

    //Background
    backgroundImage = new Texture(pathToImage);

    //Stage 
    stage = new Stage();
    stage.setViewport(viewport);

(this is located in my constructor and camera, backgroundImage and stage are fields in my class)

in render method (ConfigData holds data of settings applied to the game; DEFAULT_WIDHT and -HEIGHT are just some values I use to initialize the window when not in fullscreen mode; Replace them with your values used in the DesktopLauncher for

config.widht

and

config.height

):

@Override
public void render(float delta) {

    //Clear screen
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    stage.act();
    stage.getBatch().begin();
    stage.getBatch().draw(backgroundImage, 0, 0, ConfigData.DEFAULT_WIDTH, ConfigData.DEFAULT_HEIGHT);
    stage.getBatch().end();

    stage.draw();
}

my resize method:

@Override
public void resize(int width, int height) {
    camera.setToOrtho(false, width, height);
    stage.getViewport().update(width, height);
}

hopes this helps somehow someone because i figured out this by myself and it costed some effort (:

Upvotes: 1

Johan
Johan

Reputation: 1505

As a response to your last comment:

You are now scaling down the height correctly but the width remains the same. Try to multiply the width by the same amount you scale the height down, so with some alterations to the code you linked in the comment (not tested):

private Texture texture;
private int x1, x2, speed, scaledHeight, scaledWidth;

public StartBackground() {
    texture = new Texture("startbackground.png");

    x1 = 0;
    x2 = texture.getWidth();
    speed = 5;
    float imageRatio = Gdx.graphics.getHeight() / texture.getHeight();
    scaledHeight = (int) (texture.getHeight() * imageRatio);
    scaledWidth = (int) (texture.getWidth() * imageRatio);
}

public void updateAndRender(float deltaTime, SpriteBatch spriteBatch) {
    x1 -= speed;
    x2 -= speed;

    // If image is off screen and not visible
    if (x1 + texture.getWidth() <= 0) x1 = x2 + texture.getWidth();
    if (x2 + texture.getWidth() <= 0) x2 = x1 + texture.getWidth();

    // Render
    spriteBatch.draw(texture, x1, 0, scaledWidth, scaledHeight);
    spriteBatch.draw(texture, x2, 0, scaledWidth, scaledHeight);
}

Upvotes: 0

Related Questions