Android LibGDX:通过触摸移动相机

Android LibGDX:通过触摸移动相机,android,libgdx,touch,2d,drag,Android,Libgdx,Touch,2d,Drag,我用LibGDX创建了一个2d安卓游戏,我用一个正交相机在世界各地移动 为了移动相机,玩家应该触摸并拖动屏幕。因此,如果你触摸屏幕并向右拖动,相机应该向左移动。因此,这应该就像在画廊中移动缩放图片的部分一样。我希望你在跟踪我 代码如下: public class CameraTestMain extends ApplicationAdapter { SpriteBatch batch; Texture img; OrthographicCamera camera;

我用
LibGDX
创建了一个2d安卓游戏,我用一个正交相机在世界各地移动

为了移动相机,玩家应该触摸并拖动屏幕。因此,如果你触摸屏幕并向右拖动,相机应该向左移动。因此,这应该就像在画廊中移动缩放图片的部分一样。我希望你在跟踪我

代码如下:

public class CameraTestMain extends ApplicationAdapter {

    SpriteBatch batch;
    Texture img;
    OrthographicCamera camera;

    @Override
    public void create () {
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");
        camera = new OrthographicCamera(1280, 720);
        camera.update();
    }

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

        handleInput();
        camera.update();

        batch.setProjectionMatrix(camera.combined);

        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();
    }

    public void handleInput() {

        // That is my problem

    }

}
我不知道在
handleInput()方法中写什么。我知道有一个叫做
InputProcessor
的界面,它的方法是
touchdrable(intx,inty,intpointer)
在这里你可以处理触摸拖动,但我不知道如何使用它

感谢您的想法和帮助。

该界面允许您定义在执行某些操作(例如触摸屏)时要执行的操作

因此,首先要在类中实现接口:

    public class CameraTestMain extends ApplicationAdapter implements InputProcessor
然后在create()方法中,通过调用以下命令将类设置为InputProcessor:

    //create() method
    Gdx.input.setInputProcessor(this);
第二个是实现触摸拖动方法。请注意,它是xy参数只是相对于上一个指针位置,所以要获得指针的实际位置,您应该将其保存在触地方法中的某个全局变量中。当然,这里不需要绝对指针位置,因为您可以只修改相机位置,而不是设置此位置

    //touchDragged method
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        camera.position.set(camera.position.x + screenX, camera.position.y + screenY);
请记住在render()方法的开头调用
camera.update()


要获得更多信息,请看一看

这个问题很老了,但正如Sierox所说,接受的答案会让相机飞走,所以这里有另一个解决方案

Gdx.input.getDeltaX()
将返回当前指针位置与X轴上最后一个指针位置之间的差值

Gdx.input.getDeltaY()
将返回当前指针位置与Y轴上最后一个指针位置之间的差值

@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
    float x = Gdx.input.getDeltaX();
    float y = Gdx.input.getDeltaY();

    camera.translate(-x,y);
    return true;
}

ErIK4获奖者接受这个答案,如果它帮助你,并考虑投票,因为我认为这是一个很好的答案。屏幕和屏幕参数是绝对值。这个答案是错误的,因为这个事实:<代码>相机。位置。当screenX和screenY返回鼠标在屏幕上的位置时,代码>发送相机飞走。。。代替screenX,应该加入一些“X中的变化”,Y也是一样。。。