Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame如何在阵列中找到最近的精灵并锁定它?_Python_Arrays_Python 3.x_Pygame_Distance - Fatal编程技术网

Python Pygame如何在阵列中找到最近的精灵并锁定它?

Python Pygame如何在阵列中找到最近的精灵并锁定它?,python,arrays,python-3.x,pygame,distance,Python,Arrays,Python 3.x,Pygame,Distance,我有一个导弹精灵,如果我开枪的话。它应该去最近的敌人雪碧那里。我不知道该怎么处理这件事。我完全知道我们将使用一些距离公式,但这不是问题所在。问题是在列表中循环搜索敌人,找到离导弹最近的敌人 我已经尝试过使用for循环,但这是我目前所能想到的。我看过其他的帖子,但没有一个有同样的问题。仅适用于列表中不存在的单个精灵 导弹级 class Missile: missile = pygame.image.load("Missile-1.png") def __init__(self,x,

我有一个导弹精灵,如果我开枪的话。它应该去最近的敌人雪碧那里。我不知道该怎么处理这件事。我完全知道我们将使用一些距离公式,但这不是问题所在。问题是在列表中循环搜索敌人,找到离导弹最近的敌人

我已经尝试过使用for循环,但这是我目前所能想到的。我看过其他的帖子,但没有一个有同样的问题。仅适用于列表中不存在的单个精灵

导弹级

class Missile:
    missile = pygame.image.load("Missile-1.png")
    def __init__(self,x,y):
        self.x = x
        self.y = y
        self.yvel = 15
        self.xvel = 5
    def draw(self,win):
        win.blit(missile,(self.x,self.y))
    def chase(self):
        for enemy in enemies:
            #some code
阵列:

missiles = []
enemies = []
我预计导弹将射向最近的敌人。

我建议使用和函数计算两点之间的距离

def chase(self):
pos=pygame.math.Vector2(self.x,self.y)
敌方=最小值([e代表敌方中的e],key=lambda e:pos.distance_to(pygame.math.Vector2(e.x,e.y)))
说明:

lambda e:pos.distance_to(pygame.math.Vector2(e.x,e.y))
计算参数
e
pygame.math.Vector2
对象
pos
的距离
查找表中的最小元素。“最小”值由设置为
键的函数给出

pos
导弹的位置初始化。对于
敌人
的每个元素,计算到
pos
的距离,并通过
min
返回距离
pos
最近的敌人


当然,这可以通过手动计算平方欧氏距离进一步简化:

def chase(self):
敌人=最小值([e代表敌人中的e],键=lambda e:pow(e.x-self.x,2)+pow(e.y-self.y,2))