Android libgdx - 检查是否触摸图像

时间:2016-08-18 01:23:37

标签: android io libgdx textures

我正在尝试使用libgdx创建一个简单的Android游戏。我在屏幕上有图像,我需要确定是否触摸了图像。以下是我到目前为止编写的代码。

public final static float VP_WIDTH = 480 * INV_SCALE;
public final static float VP_HEIGHT = 800 * INV_SCALE;

private OrthographicCamera camera;
private ExtendViewport viewport;
SpriteBatch batch;
Texture texture;
private int screenHeight, screenWidth;
Sprite playImage;

@Override
public void create() {
    batch = new SpriteBatch();
    screenWidth = Gdx.graphics.getWidth();
    screenHeight = Gdx.graphics.getHeight();
    camera = new OrthographicCamera();

    // pick a viewport that suits your thing, ExtendViewport is a good start
    viewport = new ExtendViewport(VP_WIDTH, VP_HEIGHT, camera);
    Gdx.input.setInputProcessor(this);
        texture = new Texture("play.png");
        playImage = new Sprite(texture);
        playImage.setSize(texture.getWidth(), texture.getHeight());
}

public void render() {

    camera.update();
    Gdx.gl.glClearColor(0, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    batch.draw(playImage, 240 - texture.getWidth() / 2, 200 - texture
                .getHeight() / 2);
    batch.end();

}

public void dispose() {
    batch.dispose();
    texture.dispose();
}

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

public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    camera.unproject(tp.set(screenX, screenY, 0));
    if (state.equals(States.STARTED)) {
        if (screenX >= screenWidth / 2 - texture.getWidth() / 2 && screenX <= screenWidth / 2 + texture
                .getWidth() / 2 && screenY <= 3 * screenHeight / 4 + texture.getHeight() / 2 && screenY
                >= 3 * screenHeight / 4 - texture.getHeight() / 2)
            playButtonClicked = true;
    }

    return true;
}

在屏幕上,我看到我的图像位置正确,但是当我点击它时,它只会在我点击图像的中间部分时进入for循环。

似乎screenX和screenY的范围不同于480,800。如果我在这里做错了什么,有人能指出我吗?

1 个答案:

答案 0 :(得分:2)

使用相机取消投影后,未投影的x和y包含在您使用的tp向量中。 Java方法不能修改传入参数的值(就像用C中的指针一样)。

除此之外,您的代码看起来非常难以维护。您正在使用一组方程绘制图像,并使用一组不同的复杂方程计算其触摸边界。您应该在一个地方定义它的边界(可能是一个Rectangle成员变量)并将其用于绘制和命中检测。