python - Pygame如何在数组中找到最近的精灵并锁定它?
问题描述
我有一个导弹精灵,如果我射击它。它应该去最近的敌人精灵。我不知道该怎么做。我完全知道我们将使用一些距离公式,但这不是问题。问题是循环遍历列表中的敌人并找到离导弹最近的敌人。
我已经尝试过使用 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 = []
我预计导弹会飞向最近的敌人。
解决方案
我建议使用pygame.math.Vector2
和函数.distance_to()
来计算2点之间 的欧几里得距离。
def chase(self):
pos = pygame.math.Vector2(self.x, self.y)
enemy = min([e for e in enemies], 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
。
min
查找可迭代的最小元素。“最小”值由设置为key
参数的函数给出。
pos
由 的位置初始化Missile
。enemies
计算距离的每个元素,并返回pos
距离最近的敌人。 pos
min
当然,这可以通过手动计算平方欧几里得距离来进一步简化:
def chase(self):
enemy = min([e for e in enemies], key=lambda e: pow(e.x-self.x, 2) + pow(e.y-self.y, 2))
推荐阅读
- javascript - 返回干净 json 对象的快速路由
- sql - 使用日期时间值计算时间
- ios - Xcode 11.4 编译错误“未知选项:-platform_version”
- flutter - 导航器:找不到 pushNamed 的生成器/路由
- java - Kubernetes 中 Java 应用程序的 Startup-CPU-Limit
- azure - Upload File as a parameter to job in Azure DevOps
- scala - scala:如何在 sbt 中交叉构建库依赖项
- java - 如何连接两个正则表达式以获得实际表达式
- reactjs - 使用 axios 发帖不断返回 Request failed with status code 422
- c# - 如何使用 C# 和 MongoDb 获得自动增量可预测 ID