我开发了一个 2D 游戏并使用 OrthographicCamera 和 Viewport 将虚拟板的大小调整为真实的显示尺寸。我将图像添加到舞台并使用 ClickListener 来检测点击。它工作正常,但是当我改变分辨率时它工作不正确(无法检测到正确的演员,我认为新的和原始的 x 和 y 的问题)。有没有什么办法解决这一问题?
问问题
1578 次
3 回答
3
您需要将屏幕坐标转换为世界坐标。你的相机可以做到这一点。你可以做这两种方式,cam.project(...)
并且cam.unproject(...)
或者,如果您已经在使用 Actors,请不要自己初始化相机,而是使用Stage
. 创建一个舞台并将演员添加到其中。然后舞台将为您进行坐标转换。
于 2012-06-28T18:06:07.707 回答
1
曾经我也遇到过这个问题,但最后我得到了可行的解决方案,用于在 libgdx 中使用 SpriteBatch 或 Stage 绘制任何东西。使用正交相机我们可以做到这一点。
首先选择一个最适合游戏的恒定分辨率。在这里,我拍摄了 1280*720(横向)。
class ScreenTest implements Screen{
final float appWidth = 1280, screenWidth = Gdx.graphics.getWidth();
final float appHeight = 720, screenHeight = Gdx.graphics.getHeight();
OrthographicCamera camera;
SpriteBatch batch;
Stage stage;
Texture img1;
Image img2;
public ScreenTest(){
camera = new OrthographicCamera();
camera.setToOrtho(false, appWidth, appHeight);
batch = new SpriteBatch();
batch.setProjectionMatrix(camera.combined);
img1 = new Texture("your_image1.png");
img2 = new Image(new Texture("your_image2.png"));
img2.setPosition(0, 0); // drawing from (0,0)
stage = new Stage(new StretchViewport(appWidth, appHeight, camera));
stage.addActor(img2);
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(img, 0, 0);
batch.end();
stage.act();
stage.act(delta);
stage.draw();
// Also You can get touch input according to your Screen.
if (Gdx.input.isTouched()) {
System.out.println(" X " + Gdx.input.getX() * (appWidth / screenWidth));
System.out.println(" Y " + Gdx.input.getY() * (appHeight / screenHeight));
}
}
//
:
:
//
}
以任何类型的分辨率运行此代码,它将以该分辨率进行调整而不会受到任何干扰。
于 2015-01-08T10:19:41.923 回答
0
我只是认为 Stage 易于使用。如果有一些错误,我认为你应该检查你的代码:
public Actor hit(float x, float y)
于 2012-07-01T07:52:52.070 回答