二维空间中的寻径

问题描述 投票:0回答:2

我正在创建一个游戏,我希望敌人追踪到玩家身上-玩家可以在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的内容较少。有没有办法使寻路仍然有效,但速度不变?还是有人知道另一种寻路方法以及如何实现它?

python math pygame path-finding
2个回答
0
投票

一种方法是使用玩家和敌人的位置来找到连接它们的直线的斜率/角度。

[考虑到敌人位于(x1,y1),玩家位于(x2,y2)。然后

angle = arctan((y2 - y1)/x2-x1))

请注意,x2-x1可以为零,因此请注意这种情况。

找到线后,可以使用极坐标找到下一个位置

例如

x += speed * sin(angle)
Y += speed * cos(angle)

0
投票

毕达哥拉斯是你的朋友

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
© www.soinside.com 2019 - 2024. All rights reserved.