ai直线追逐玩家的算法?
algorithm for ai to chase player in straight line?
我正在 libgdx(java) 制作一款游戏,其中方块追逐主要玩家。我不知道如何让方块以恒定的速度直线直接移动到玩家身上。这意味着我希望方块每秒移动相同的距离。我创建了一个变量并将其设置为等于 chasePattern1
。 saidvariable[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
其中 vx
和 vy
是您需要每秒添加到正方形坐标的值。
编辑:
你可以这样看:如果你想以v
的速度从你的位置d
"points"行驶到目的地[=19] =] 移动。
现在,你必须水平移动的距离是 x1-x0
,垂直移动的距离是 y1-y0
,如果你想在 t
移动中移动这两个距离,你需要除以每个距离 t
件,这是每个组件的速度(x
和 y
)。当您将 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;
我正在 libgdx(java) 制作一款游戏,其中方块追逐主要玩家。我不知道如何让方块以恒定的速度直线直接移动到玩家身上。这意味着我希望方块每秒移动相同的距离。我创建了一个变量并将其设置为等于 chasePattern1
。 saidvariable[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
其中 vx
和 vy
是您需要每秒添加到正方形坐标的值。
编辑:
你可以这样看:如果你想以v
的速度从你的位置d
"points"行驶到目的地[=19] =] 移动。
现在,你必须水平移动的距离是 x1-x0
,垂直移动的距离是 y1-y0
,如果你想在 t
移动中移动这两个距离,你需要除以每个距离 t
件,这是每个组件的速度(x
和 y
)。当您将 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;