Search code examples
javaandroidlibgdxvertical-scrollingtop-down

How to extend the background in LibGdx for top down game?


What is the proper way to extend the background in top down game? I used LibGdx framework. Any idea or tutorial for top down game.My background is in PNG format and screen of 720x1280 portrait.I had a problem in extending the background.I want the camera follow the character and the background will extend. How could I do that? Here is the Screen shot of

https://i.sstatic.net/jl03R.png

Here is my code

To display background I used this

    //background
    Background = new Texture(Gdx.files.internal("floor.png")); //File from assets folder
    Background.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.Repeat);
    bgsprite = new Sprite(Background);

In render

 spriteBatch.draw(Background,0,100,0, srcy, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
    srcy +=3;

The background is scrolling but the camera don't follow the player(cat)

Source code for GameScreen http://pastebin.com/Dxfx9f65

Thank's and Advance any help or suggestion are much appreciated. :)


Solution

  • Use two identical texture background. Each the size of the screen It can be the same file. It is important that are docked vertically. Move of at the same time. Alternately changing with each other. Sample code:

    declaration:

    Texture background1, background2;
    SpriteBatch batch;
    float yMax, yCoordBg1, yCoordBg2;
    final int BACKGROUND_MOVE_SPEED = 100; // pixels per second. Put your value here.
    

    creation:

    Background1 = new Texture(Gdx.files.internal("floor.png"));
    Background2 = new Texture(Gdx.files.internal("floor.png")); // identical 
    yMax = 1280;
    yCoordBg1 = yMax*(-1); yCoordBg2 = 0;
    

    in method render:

    yCoordBg1 += BACKGROUND_MOVE_SPEED * Gdx.graphics.getDeltaTime();
    yCoordBg2 = yCoordbg1 + yMax;  // We move the background, not the camera
    if (yCoordBg1 >= 0) {
        yCoordBg1 = yMax*(-1); yCoordBg2 = 0;
    }
    batch.begin();
    batch.draw(background1, 0, yCoordBg1);
    batch.draw(background2, 0, yCoordBg2);
    batch.end();
    

    The background can be made in the format jpg - will spend less memory.