二维寻路 space
Path-finding in 2D space
我正在创建一个游戏,我希望敌人通过路径跟踪玩家 - 玩家可以在 2D 平面上向任何方向移动。一开始,我试过...
self.bat_x += (player_rect.centerx - self.rect.centerx) / 60
self.bat_y += (player_rect.centery - self.rect.centery) / 60
此处路径跟踪工作正常。我将每个值除以 60,这样敌人就不会出现并粘在我的玩家身上/减慢敌人的移动速度。不过,敌人离得越远,速度就越快。蝙蝠离得越近,速度就越慢。这是因为,例如使用 x 轴,当玩家和敌人之间的距离越小时,player_rect.centerx - self.rect.centerx
越小,因此添加到 self.bat_x
的也越少。有没有办法让寻路仍然有效但速度不变?或者有人知道不同的寻路方法以及如何实现吗?
一种方法是使用玩家和敌人的位置来找到连接他们的线的slope/angle。
考虑到敌人在 (x1, y1) 而玩家在 (x2, y2)。
那么
angle = arctan((y2 - y1)/x2-x1))
请注意,x2 - x1 可能为零,因此请注意这种情况。
找到线后,可以用极坐标找到下一个位置
例如
x += speed * sin(angle)
Y += speed * cos(angle)
毕达哥拉斯是你的朋友
x = player_rect.centerx - self.rect.centerx
y = player_rect.centery - self.rect.centery
norm = (x**2 + y**2)**0.5
const = 1/60
self.bat_x += const * x / norm
self.bat_y += const * y / norm
我正在创建一个游戏,我希望敌人通过路径跟踪玩家 - 玩家可以在 2D 平面上向任何方向移动。一开始,我试过...
self.bat_x += (player_rect.centerx - self.rect.centerx) / 60
self.bat_y += (player_rect.centery - self.rect.centery) / 60
此处路径跟踪工作正常。我将每个值除以 60,这样敌人就不会出现并粘在我的玩家身上/减慢敌人的移动速度。不过,敌人离得越远,速度就越快。蝙蝠离得越近,速度就越慢。这是因为,例如使用 x 轴,当玩家和敌人之间的距离越小时,player_rect.centerx - self.rect.centerx
越小,因此添加到 self.bat_x
的也越少。有没有办法让寻路仍然有效但速度不变?或者有人知道不同的寻路方法以及如何实现吗?
一种方法是使用玩家和敌人的位置来找到连接他们的线的slope/angle。
考虑到敌人在 (x1, y1) 而玩家在 (x2, y2)。 那么
angle = arctan((y2 - y1)/x2-x1))
请注意,x2 - x1 可能为零,因此请注意这种情况。
找到线后,可以用极坐标找到下一个位置
例如
x += speed * sin(angle)
Y += speed * cos(angle)
毕达哥拉斯是你的朋友
x = player_rect.centerx - self.rect.centerx
y = player_rect.centery - self.rect.centery
norm = (x**2 + y**2)**0.5
const = 1/60
self.bat_x += const * x / norm
self.bat_y += const * y / norm