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 に答える