简体   繁体   English

如何在libgdx Scene2d的舞台上放大和缩小?

[英]How to zoom in and out on a stage in libgdx Scene2d?

I am making a 2d game using libgdx and am adding hexagon shaped actors to a group which is then added to a stage. 我正在使用libgdx进行2D游戏,并将六角形演员添加到一个组中,然后将其添加到舞台中。 For a normal camera you can use camera.zoom in the render method to zoom in and out along with camera.translate to pan around the world. 对于一个正常的摄像头,你可以使用camera.zoom在渲染方法在放大和缩小沿camera.translate平移世界各地。

I have been getting the camera used by the stage using stage.getCamera() and I can still call stage.getcamera().translate however there is no stage.getCamera().zoom option. 我一直在使用stage.getCamera()获取舞台使用的相机,我仍然可以调用stage.getcamera().translate但是没有stage.getCamera().zoom选项。

Here is my code: 这是我的代码:

//import statements

public class HexGame implements ApplicationListener{

private Stage stage;

private Texture hexTexture;
private Group hexGroup;

private int screenWidth;
private int screenHeight;


@Override
public void create() {

    hexTexture = new Texture(Gdx.files.internal("hex.png"));

    screenHeight = Gdx.graphics.getHeight();
    screenWidth = Gdx.graphics.getWidth();

    stage = new Stage(new ScreenViewport());

    hexGroup = new HexGroup(screenWidth,screenHeight,hexTexture);

    stage.addActor(hexGroup);
}

@Override
public void dispose() {
    stage.dispose();
    hexTexture.dispose();
}

@Override
public void render() {
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    stage.act(Gdx.graphics.getDeltaTime());
    stage.draw();

    handleInput();
    stage.getCamera().update();

}


private void handleInput() {

    if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) {
        stage.getCamera().translate(-3, 0, 0);
    }
    if (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) {
        stage.getCamera().translate(3, 0, 0);
    }
    if (Gdx.input.isKeyPressed(Input.Keys.DOWN)) {
        stage.getCamera().translate(0, -3, 0);
    }
    if (Gdx.input.isKeyPressed(Input.Keys.UP)) {
        stage.getCamera().translate(0, 3, 0);
    }

    //This is the part that doesn't work
    /*
    if (Gdx.input.isKeyPressed(Input.Keys.Z)) {
        stage.getCamera().zoom += 0.02;
    }
    */

    }



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

@Override
public void pause() {
}

@Override
public void resume() {
}


}

Any help is appreciated, and if there is anything else wrong with my code please let me know, I'm new to libgdx. 任何帮助表示赞赏,如果我的代码有任何其他问题,请告诉我,我是libgdx的新手。 Thanks 谢谢

Zoom is available in OrthographicCamera class and by default Stage class create a OrthographicCamera Zoom可在OrthographicCamera类中使用,默认情况下Stage类创建OrthographicCamera

/** Creates a stage with a {@link ScalingViewport} set to {@link Scaling#stretch}. The stage will use its own {@link Batch}
     * which will be disposed when the stage is disposed. */
    public Stage () {
        this(new ScalingViewport(Scaling.stretch, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), new OrthographicCamera()),
            new SpriteBatch());
        ownsBatch = true;
    }

So what you need is to cast your camera to OrthographicCamera : 所以你需要的是将你的相机投射到OrthographicCamera

((OrthographicCamera)stage.getCamera()).zoom += 0.02f;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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