ai用直线追逐玩家的算法?

时间:2015-05-21 00:51:54

标签: java algorithm path libgdx

我正在用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;
}

2 个答案:

答案 0 :(得分:6)

如果d是玩家与方格之间的距离,v是您希望方块移动的速度,(x1,y1)是玩家的位置(x0,y0) 1}}是正方形的位置,然后

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

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

编辑:

您可以这样查看:如果您想从您的位置前往目的地d&#34;积分&#34;速度为v时,您需要t=d/v次移动。

现在,你必须水平移动的距离是x1-x0,垂直距离是y1-y0,如果你想在t次移动中移动两个距离,你需要划分每个距离在t件中,每个组件的速度(xy)。当您为x1-x0划分t时,您获得的值与y相同

答案 1 :(得分:2)

这是你想要从概念上做的事情。

您想要在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;