LibGDX:用Touch移动相机

eri*_*ers 5 android 2d touch drag libgdx

我创建了一个二维Android游戏,LibGDX我使用正交相机移动世界.

为了移动相机,播放器应触摸并拖动屏幕.因此,如果您触摸屏幕并向右拖动,相机应向左移动.所以它应该就像移动画廊中缩放图片的部分一样.我希望你跟着我.

这是代码:

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

    }

}
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么写这个handleInput()方法.我知道有一个调用InputProcessor该方法的接口touchDragged(int x, int y, int pointer)可以处理Touch Drag,但我不知道如何使用它.

感谢您的想法和帮助.

cen*_*ond 12

这个问题很老,但正如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;
}
Run Code Online (Sandbox Code Playgroud)


m.a*_*icz 2

输入处理器是一个接口,允许您定义执行某些操作(例如触摸屏)时要执行的操作。

所以第一件事是在你的类中实现接口:

    public class CameraTestMain extends ApplicationAdapter implements InputProcessor
Run Code Online (Sandbox Code Playgroud)

然后在create()方法中通过调用将类设置为 InputProcessor:

    //create() method
    Gdx.input.setInputProcessor(this);
Run Code Online (Sandbox Code Playgroud)

第二个是实现touchDragged方法。请注意,它的xy参数仅相对于最后一个指针位置,因此要获取指针的实际位置,您应该将其保存在touchDown方法中的某个全局变量中。当然,您在这里不需要绝对指针位置,因为您可以只修改相机位置而不是设置它。

    //touchDragged method
    public boolean touchDragged(int screenX, int screenY, int pointer) {
        camera.position.set(camera.position.x + screenX, camera.position.y + screenY);
Run Code Online (Sandbox Code Playgroud)

记住在render()camera.update()方法的开头调用!

要获取更多信息,请查看本教程

  • 这个答案是错误的,因为“camera.position.set(camera.position.x + screenX,camera.position.y + screenY);”使相机飞走,因为 screenX 和 screenY 返回鼠标所在的位置screen...而不是 screenX,应该放入某种“X 的变化”,Y 也一样... (2认同)