[英]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.