0

InputPorcessor を実装する InputHandler というクラスを使用しています。ただし、画面をクリックして選択したポイントにプレーヤーを移動できないという問題があります。

その理由は、マップ上で 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