繁体   English   中英

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

[英]Move sprite to mouse click [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;
    }

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

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

所以每次触摸屏幕只会移动你的精灵一次。

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

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

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

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

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

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

暂无
暂无

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

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