我正在用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;
}
答案 0 :(得分:6)
如果d
是玩家与方格之间的距离,v
是您希望方块移动的速度,(x1,y1)
是玩家的位置(x0,y0)
1}}是正方形的位置,然后
vx = (x1 - x0) * v / d
vy = (y1 - y0) * v / d
其中vx
和vy
是您需要每秒添加到方形坐标的值。
您可以这样查看:如果您想从您的位置前往目的地d
&#34;积分&#34;速度为v
时,您需要t=d/v
次移动。
现在,你必须水平移动的距离是x1-x0
,垂直距离是y1-y0
,如果你想在t
次移动中移动两个距离,你需要划分每个距离在t
件中,每个组件的速度(x
和y
)。当您为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;