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

时间:2015-03-08 13:25:20

标签: java libgdx

我是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 个答案:

答案 0 :(得分: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);
}