简体   繁体   中英

How do you implement Horizontal-Scrolling with LibGDX?

I want to program a game that is like the old "Warfare 1917" browser games. I am stuck on the scrolling part.

I'll try to explain what I want to with a gif:

在此处输入图片说明

I have searched and tried everything the whole day but I am not able to find any real solutions to this. I hope you can understand what I am trying to do.

I think this should do the trick

public class MovingCamera extends InputAdapter {

    OrthographicCamera camera;    // The camera to be moved
    float pivotX;                 // The pivot for the movement

    public MovingCamera() {
        camera = new OrthographicCamera(); // Initialize camera
    }

    // Create a pivot
    @Override
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        Vector3 unprojected = camera.unproject(new Vector3(screenX, screenY, 0)); // Convert from pixel to world coordinates
        pivotX = unprojected.x;                                                   // Save first finger touch on screen (Will serve as a pivot)
        return true;                                                              // Input has been processed
    }

    // Move the camera
    @Override
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        Vector3 unprojected = camera.unproject(new Vector3(screenX, screenY, 0)); // Convert from pixel to world coordinates
        camera.position.x += unprojected.x - pivotX;                              // Change camera position
        camera.update();                                                          // Apply changes
        return true;                                                              // Input has been processed
    }
}

And in your render method:

public void render(SpriteBatch spriteBatch) {
    spriteBatch.setProjectionMatrix(camera.combined); // Let the Sprite Batch use the camera
    spriteBatch.begin();
    // [Draw your Textures, TextureRegions, Sprites, etc...]
    spriteBatch.end();
}

Since moving camera is a bad practice, better moving a Layer (the container of your sprites) or you can try ScrollPane , the implementation of the WidgetGroup

See https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/ScrollPane.html

ps tested on v. 1.9.11

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM