微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在A组中追逐B组中最接近的Sprite?

如何解决如何在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)) 

但被告知该组不是可迭代的。

有人可以帮我这两件事吗?让整个追赶者群在整个其他追赶者群中寻找,然后走向最接近的那个人?

谢谢您的帮助!

解决方法

[...]组不可迭代。

如果chasedpygame.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 举报,一经查实,本站将立刻删除。