ai直线追逐玩家的算法?

algorithm for ai to chase player in straight line?

我正在 libgdx(java) 制作一款游戏,其中方块追逐主要玩家。我不知道如何让方块以恒定的速度直线直接移动到玩家身上。这意味着我希望方块每秒移动相同的距离。我创建了一个变量并将其设置为等于 chasePattern1saidvariable[0] 被添加到敌人 x 值,saidvariable[1] 被添加到敌人 y 值。

private float[] chasePattern1(float enemy_x,float enemy_y,float speed){
    float[] returnvalue={0,0};

    if(enemy_x>mainsquare.getX()){
        returnvalue[0]=-1*speed;
    }
    if(enemy_x<mainsquare.getX()){
        returnvalue[0]=speed;///does float work?no
    }
    if(enemy_y>mousey){
        returnvalue[1]=-1*speed;
    }
    if(enemy_y<mousey){
        returnvalue[1]=speed;
    }
    return returnvalue;
}

如果 d 是玩家和方块之间的距离,v 是您希望方块移动的速度,(x1,y1) 是玩家的位置,并且(x0,y0)是正方形的位置,那么

vx = (x1 - x0) * v / d
vy = (y1 - y0) * v / d

其中 vxvy 是您需要每秒添加到正方形坐标的值。

编辑:

你可以这样看:如果你想以v的速度从你的位置d"points"行驶到目的地[=19] =] 移动。

现在,你必须水平移动的距离是 x1-x0,垂直移动的距离是 y1-y0,如果你想在 t 移动中移动这两个距离,你需要除以每个距离 t 件,这是每个组件的速度(xy)。当您将 x1-x0 除以 t 时,您将得到该值,与 y

相同

这是您想在概念上做的事情。

您想在 AI 移动的方向上创建一个矢量。那将是连接 AI 和玩家的方向的向量。然后,缩放向量,使其长度为 1。然后将该向量乘以 AI 的恒定速度。

这是一些伪代码

AI_SPEED = 5
v = [ player.x - ai.x , player.y - ai.y ]
len = sqrt( v.x*v.x + v.y*v.y )
dir = [ v.x / len , v.y / len ]
movement = [ dir.x * AI_SPEED , dir.y * AI_SPEED ]
ai.x += movement.x;
ai.y += movement.y;