如何在 libgdx Scene2d 中放大和缩小舞台?
How to zoom in and out on a stage in libgdx Scene2d?
我正在使用 libgdx 制作一个 2d 游戏,并将六边形演员添加到一个组中,然后将其添加到舞台上。对于普通相机,您可以在渲染方法中使用 camera.zoom
来放大和缩小以及 camera.translate
来环游世界。
我一直在使用 stage.getCamera()
获取舞台使用的相机,我仍然可以调用 stage.getcamera().translate
但是没有 stage.getCamera().zoom
选项。
这是我的代码:
//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() {
}
}
感谢任何帮助,如果我的代码还有其他问题,请告诉我,我是 libgdx 的新手。谢谢
Zoom 在 OrthographicCamera
class 中可用,默认情况下 Stage
class 创建一个 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;
}
所以您需要将相机投射到 OrthographicCamera
:
((OrthographicCamera)stage.getCamera()).zoom += 0.02f;
我正在使用 libgdx 制作一个 2d 游戏,并将六边形演员添加到一个组中,然后将其添加到舞台上。对于普通相机,您可以在渲染方法中使用 camera.zoom
来放大和缩小以及 camera.translate
来环游世界。
我一直在使用 stage.getCamera()
获取舞台使用的相机,我仍然可以调用 stage.getcamera().translate
但是没有 stage.getCamera().zoom
选项。
这是我的代码:
//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() {
}
}
感谢任何帮助,如果我的代码还有其他问题,请告诉我,我是 libgdx 的新手。谢谢
Zoom 在 OrthographicCamera
class 中可用,默认情况下 Stage
class 创建一个 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;
}
所以您需要将相机投射到 OrthographicCamera
:
((OrthographicCamera)stage.getCamera()).zoom += 0.02f;