def move_towards_player(self, player): # Find direction vector (dx, dy) between enemy and player. dx, dy = player.rect.x - self.rect.x, player.rect.y - self.rect.y dist = math.hypot(dx, dy) dx, dy = dx / dist, dy / dist # Normalize. # Move along this normalized vector towards the player at current speed. self.rect.x += dx * self.speed self.rect.y += dy * self.speed def move_towards_player2(self, player): # Find direction vector (dx, dy) between enemy and player. dirvect = pygame.math.Vector2(player.rect.x - self.rect.x, player.rect.y - self.rect.y) dirvect.normalize() # Move along this normalized vector towards the player at current speed. dirvect.scale_to_length(self.speed) self.rect.move_ip(dirvect)
时间: 2023-06-15 16:08:24 浏览: 78
运动方向判断
这段代码是一个敌人追逐玩家的函数,两个函数的功能相同,但是第二个函数使用了pygame中的向量(Vector2)对象,使代码更加简洁易懂,同时也提高了代码的可读性和可维护性。具体来说,第二个函数中的dirvect就是一个向量对象,它表示从敌人到玩家的方向向量。normalize()方法可以将这个向量归一化,即使它的模长为1,这样做的好处是可以保证敌人每次移动的距离一定。scale_to_length()方法则可以将这个向量的长度按照敌人的速度进行缩放,最后使用move_ip()方法将敌人移动到新的位置。相比之下,第一个函数中需要手动计算向量的长度和方向,并且使用两个变量来存储这些信息,代码比较冗长,可读性差一些。
阅读全文