如何解决如何在A组中追逐B组中最接近的Sprite?
从这里开始学习python。我想分为两组,一组中的每个子画面都追逐另一组中最接近的子画面。
我有一个代码,一个组中的所有子画面都从另一个组中追逐一个子画面。
def chase(sprite,group):
for entity in group:
if math.hypot(entity.rect.centerx - sprite.rect.centerx,entity.rect.centery - sprite.rect.centery) < 1200:
if entity.rect.left - sprite.rect.left < 0:
entity.rect.left += 2
else:
entity.rect.left -= 2
if entity.rect.top - sprite.rect.top < 0:
entity.rect.top += 2
else:
entity.rect.top -= 2
def run(sprite,group):
for entity in group:
if math.hypot(entity.rect.centerx - sprite.rect.centerx,entity.rect.centery - sprite.rect.centery) < 65:
if entity.rect.left - sprite.rect.left < 0:
entity.rect.left -= 9
else:
entity.rect.left += 9
if entity.rect.top - sprite.rect.top < 0:
entity.rect.top -= 9
else:
entity.rect.top += 9
我不知道如何获得它,所以整个团队都会做出反应。当然,整个团队都会追逐,但是他们只会追赶1个精灵。我不能让整个团队都追逐整个其他团队。而且我不能告诉其他所有人,他们应该从所有追逐者中逃脱,而不仅仅是一个。
为了做到这一点,我想找出一个组中哪个精灵最接近,但是我不确定该怎么做。我试着玩这个:
enemy = min([e for e in chased],key=lambda e: pow(e.x-entity.x,2) + pow(e.y-entity.y,2))
但被告知该组不是可迭代的。
有人可以帮我这两件事吗?让整个追赶者群在整个其他追赶者群中寻找,然后走向最接近的那个人?
谢谢您的帮助!
解决方法
[...]组不可迭代。
如果chased
是pygame.sprite.Group
对象,则可以通过pygame.sprite.Sprite
方法获得sprites()
对象的列表:
enemy = min([e for e in chased.sprites()],key=lambda e: pow(e.x-entity.x,2) + pow(e.y-entity.y,2))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。