0

我正在使用一个名为 InputHandler 的类,它实现了 InputPorcessor。但是我遇到了一个问题,我无法通过单击屏幕将播放器移动到我选择的点。

原因是我不确定如何在地图上协调 x,y,然后我将使用它来设置玩家的新位置。

这是我的 InputHandler 类

public class InputHandler implements InputProcessor {

    private OrthographicCamera cam;

    private boolean dragged = false;

    private Player player;

    private TiledMap map;

    private Vector2 oPos;

    public InputHandler(OrthographicCamera camera, Player player,
            TiledMap map) {
        this.cam = camera;
        this.player = player;
        this.map = map;
    }

    @Override
    public boolean touchDown(int screenX, int screenY, int pointer,
            int button) {
        oPos = new Vector2(Gdx.input.getX(), Gdx.input.getY());
        return false;
    }

    @Override
    public boolean touchUp(int screenX, int screenY, int pointer,
            int button) {
        if (!dragged) {
            // move the player
        } else
            dragged = false;
        return false;
    }

    public boolean touchDragged(int x, int y, int pointer) {
        dragged = true;
        moveCamera(x, y);
        return false;
    }

    private void moveCamera(int touchX, int touchY) {
        Vector2 nPos = getNewCameraPosition(touchX, touchY);

        cam.translate(nPos.sub(cam.position.x, cam.position.y));
        Gdx.app.log(PArena.LOG, "Moved Camera");

        oPos.set(touchX, touchY);
    }

    private Vector2 getNewCameraPosition(int x, int y) {
        Vector2 nPos = oPos;
        nPos.sub(x, y);
        nPos.y = -nPos.y;
        nPos.add(cam.position.x, cam.position.y);
        return nPos;
    }
}
4

1 回答 1

1

要了解您的游戏世界(通过 看Camera),您需要使用以下代码段:

Vector3 screenTouchPosition= new Vector3(touchX, touchY, 0);
cam.unproject(screenTouchPosition); // this will change your Vector directly
Vector3 gameWorldTouchPosition = screenTouchPosition;
于 2013-09-04T07:32:37.017 回答