顺利运动java

时间:2013-07-28 20:05:06

标签: java game-physics

我正在研究Java中的一些AI内容。当一个实体向一个点移动时,该移动看起来并不自然。如果它的起点和目标彼此不相等X和Y距离,则运动如下:Unnatural movement

我希望它看起来像这样:Smoother movement

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

        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速度。

2 个答案:

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

答案 1 :(得分:2)

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

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