首页 文章

将精灵移动到鼠标单击[Libgdx];

提问于
浏览
3

我是libgdx游戏编程的新手,我想创建一个RPG类型的游戏 .

我想让玩家朝着鼠标/触摸位置移动 .

我已经计算出了这样做的合理方法,但似乎玩家一次只能移动一帧,这意味着玩家需要多次点击才能到达正确的位置,而不是走到点击位置框架框架只需点击一下即可 .

我的代码:

Gdx.input.setInputProcessor(new Input(){
    public boolean touchDown(int screenX, int screenY, int pointer, int button) {
        projected = new Vector3(screenX, screenY, 0);
        cam.unproject(projected);

        if(projected.x != position.x || projected.y != position.y){
            float pathX = projected.x - position.x;
            float pathY = projected.y - position.y;

            float distance = (float) Math.sqrt(pathX * pathX + pathY * pathY);
            float directionX = pathX / distance;
            float directionY = pathY / distance;

            position.x += directionX * Speed;
            position.y += directionY * Speed;
        }

        return true;
    }

1 回答

  • 1

    每次触摸屏幕时都会调用您的方法(一次) . 您的方法更改位置(一次)

    position.x += directionX * Speed;
    position.y += directionY * Speed;
    

    因此,每次触摸屏幕都只会移动您的精灵一次 .

    你的 Screen 类有一个方法render(float deltaTime) . 这会被重复调用,参数给出自上次调用以来的时间 . 这使得它成为一种有用的方法,可以执行您需要重复发生的事情(比如更新精灵的位置) .

    所以你真正想要在 touchDown() 中做的是设置你的精灵的方向(作为你的Sprite对象中包含的字段) . 然后你可以编写类似的方法

    update(float deltaTime) {
       position.x += directionX * Speed * deltaTime;
       position.y += directionY * Speed * deltaTime;
    }
    

    在你的精灵课程中 . 这几乎就是你写的,但 * deltaTime 确保位置改变的数量只是自上次调用此方法以来所覆盖的距离 .

    此方法仍然永远不会被调用,因此您需要从 Screen.render(deltaTime) 方法中调用它:

    render(float deltaTime) {
       mySprite.update(deltaTime);
    }
    

相关问题