繁体   English   中英

使用输入处理器libgdx移动精灵

[英]Moving a sprite using the input processor libgdx

我正在使用一个名为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;
    }
}

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

Vector3 screenTouchPosition= new Vector3(touchX, touchY, 0);
cam.unproject(screenTouchPosition); // this will change your Vector directly
Vector3 gameWorldTouchPosition = screenTouchPosition;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM