0

我正在用 Java 做一些 AI 方面的工作。当一个实体向一个点移动时,移动看起来并不自然。如果它的起点和目标之间的 X 和 Y 距离不相等,则运动如下所示:不自然的运动

我希望它看起来像这样:运动更顺畅

目前,移动是这样完成的:

        int tX = target.x;
        int tY = target.y;

        if(tX> oX){
            getOwner().addX(getOwner().getMoveSpeed());
        }

        if(tX < oX){
            getOwner().addX(-getOwner().getMoveSpeed());
        }

        if(tY> oY){
            getOwner().addY(getOwner().getMoveSpeed());
        }

        if(tY< oY){
            getOwner().addY(-getOwner().getMoveSpeed());
        }

我猜有比这更好的处理运动的方法。

所以我想知道的可能是如何计算出我需要移动的角度,然后计算出所需的 x 和 y 速度。

4

2 回答 2

6

您只需要根据在每个方向上行驶的总距离来缩放 x 和 y 速度。

int仅当您需要分配位置时,它才有助于以浮点数进行计算并四舍五入。

int tX = target.x;
int tY = target.y;
float speed = getOwner.getMoveSpeed();
float dX = tX - oX;
float dY = tY - oY;
float dist = Math.sqrt(dX * dX + dY * dY);
float sX = speed * dX / dist;
float sY = speed * dY / dist;

getOwner().addX((int) (sX + 0.5));
getOwner().addY((int) (sY + 0.5));
于 2013-07-28T20:07:29.513 回答
2

您正在描述在两点之间画线的过程。

有相对简单的纯整数算法,例如Bresenham,可能会有所帮助。

于 2013-07-29T04:38:59.243 回答