拖动纹理(不跳转)

时间:2016-06-20 06:24:17

标签: libgdx drag spritebatch

如何拖动纹理(图像)而不使其跳转并将其自身置于鼠标光标上(我的代码中有以下内容)?

单击纹理时,不会发生任何事情,当我拖动时,鼠标光标应保持原位(相对于纹理的边缘)。

示例:https://s31.postimg.org/ojapwbj6j/Untitled_1.jpg

SpriteBatch batch;
Texture texture;
OrthographicCamera camera;
Vector3 spritePosition = new Vector3();

float offsetX, offsetY;
Vector3 input;

@Override
public void create () {

    batch = new SpriteBatch();
    texture = new Texture("badlogic.jpg");
    camera = new OrthographicCamera();
    camera.setToOrtho(false);

}

@Override
public void render () {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    batch.draw(texture, spritePosition.x, spritePosition.y);
    batch.end();

    if (Gdx.input.justTouched()){

            int x1 = Gdx.input.getX();
            int y1 = Gdx.input.getY();
            input = new Vector3(x1, y1, 0);
            camera.unproject(input);

            offsetX = x1 - spritePosition.x;
            offsetY = y1 - spritePosition.y;

    }

    if (Gdx.input.isTouched()) {

        spritePosition.set(Gdx.input.getX() - offsetX, Gdx.input.getY() - offsetY, 0);

    }

}

2 个答案:

答案 0 :(得分:0)

你为什么使用camera.unproject?

试试这个:

Override
public void render () {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    batch.draw(texture, spritePosition.x, spritePosition.y);
    batch.end();

    if (Gdx.input.isTouched()) {
        spritePosition.set(Gdx.input.getX() - texture.getWidth() / 2, Gdx.input.getY() + texture.getHeight() / 2, 0);
    }

}

答案 1 :(得分:0)

你需要做的是计算鼠标位置相对于你的图像的偏移量,然后减去它,而不是你现在正在做的宽度/高度的一半。

这里有一些非常粗略的伪代码来表明我的意思 - 你需要重写为Java ...

if Gdx.input.justTouched {
    get mouse position from Gdx.input
    camera.unproject it into cameraX and cameraY
    offsetX = cameraX - imageX
    offsetY = cameraY - imageY
}

if Gdx.input.isTouched {
    spritePisition.set(Gdx.input.getX() - offsetX, Gdx.input.getY - offsetY)
}