gpt4 book ai didi

resize - LibGDX 舞台坐标在窗口调整大小时发生变化

转载 作者:行者123 更新时间:2023-12-01 09:57:17 25 4
gpt4 key购买 nike

我看过很多关于 LibGDX 和屏幕/凸轮坐标的主题,还有一些关于窗口大小调整的主题,但我就是找不到解决以下问题的方法。

在这个阶段制作基本舞台和基本 Actor 时,比如说windowsize 480x320,一切都OK。我可以点击我的 Actor ,它会响应。但是当我调整我的窗口大小时,比如 600x320,一切看起来正确,但我的 clicklistener 不再工作了。此外,舞台坐标被移动或弄乱了。

我使用以下代码:

stage.addListener(new InputListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {

//determine if actor was hit
System.out.println(stage.hit(x, y, true));
return true;
}
});

另外,我正在调整我的舞台摄像机视口(viewport)以对应窗口:

    stage.getCamera().viewportWidth = Gdx.graphics.getWidth();
stage.getCamera().viewportHeight = Gdx.graphics.getHeight();

因此,在调整大小时,我在屏幕上获得了所需的效果,但我的听众没有响应 - Actor 似乎“偏移”了我点击的位置。我究竟做错了什么?我应该移动我的 Actor 或我的摄像头,还是根据调整大小缩放我的摄像头?有人可以向我解释一下吗?

提前非常感谢!

编辑:下面是我类(class)的完整代码。

public class HelpMePlease implements ApplicationListener{

// A standard simple Actor Class
class CustomActor extends Actor {

Texture texture = new Texture(Gdx.files.internal("data/testTex2.png"));
TextureRegion pixelTexture = new TextureRegion(texture, 0, 0, 1, 1);
Sprite sprite = new Sprite(texture);

public CustomActor() {
setWidth(128);
setHeight(128);
setBounds(getX(), getY(), getWidth(), getHeight());
}

@Override
public void draw(SpriteBatch batch, float parentAlpha) {
batch.draw(sprite, getX(), getY(), 0f, 0f, getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation());
}
}

public Stage stage;
public CustomActor actor;

@Override
public void create() {


stage = new Stage(480,320,true);

actor = new CustomActor();

stage.addListener(new InputListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {

//determine if actor was hit
System.out.println(stage.hit(x, y, true));
return true;
}
});

Gdx.input.setInputProcessor(stage);
stage.addActor(actor);

}

@Override
public void resize(int width, int height) {

//resize cam viewport
stage.getCamera().viewportWidth = Gdx.graphics.getWidth();
stage.getCamera().viewportHeight = Gdx.graphics.getHeight();

}

@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
stage.getCamera().update(); //just to be sure, I don't know if this is necessary
stage.act();
stage.draw();
}

@Override
public void pause() {
// TODO Auto-generated method stub

}

@Override
public void resume() {
// TODO Auto-generated method stub

}

@Override
public void dispose() {
// TODO Auto-generated method stub

}

}

最佳答案

您可以使用最新的每晚更改调整大小。

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

最后一个参数“true”将使相机在屏幕中居中

关于resize - LibGDX 舞台坐标在窗口调整大小时发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23373601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com