繁体   English   中英

如何阻止敌人重叠 pygame

[英]How can I stop enemies from overlapping pygame

我正在尝试找到一种方法让敌人在我的 2d 游戏(pygame)中跟踪玩家但不聚集

目前,当我向他们射击时,子弹会碰撞并伤害所有聚集的敌人。 我希望它是一个宝库,但分散到我无法一次击中每个敌人的地方

看起来像这样

这是他们聚集在一起的 gif

我不确定如何获得敌人位置的各个值,以便在它们发生碰撞时移动它们或者我应该如何移动它们

这是我目前让敌人追踪玩家的方法:

     for aliveEnemies in enemy:
        if playerObj.rect.x - aliveEnemies.rect.x != 0:
            if playerObj.rect.x > aliveEnemies.rect.x:
                aliveEnemies.rect.x += 1
            if playerObj.rect.x < aliveEnemies.rect.x:
                aliveEnemies.rect.x -= 1
        if playerObj.rect.y - aliveEnemies.rect.y != 0:
            if playerObj.rect.y > aliveEnemies.rect.y:
                aliveEnemies.rect.y += 1
            if playerObj.rect.y < aliveEnemies.rect.y:
                aliveEnemies.rect.y -= 1"

任何帮助或正确方向的点将不胜感激

您可以在敌人之间进行碰撞检测,以确定哪些距离太近。 你还需要改变他们的行为,决定当他们离得太近时该怎么做。

如果您知道您永远不会遇到太多敌人,您可以尝试将每个敌人与其他所有敌人进行比较。 这将需要 O(N^2) 的工作,但如果 N 有限,这可能是可以的。

如果您无论如何都在比较每个敌人,那么您有更多选择,而不仅仅是“碰撞检测”:比如Boids算法(它可以避免碰撞)。

Pygame rect objects have a function called "colliderect" which tests whether two rect objects are overlapping: https://www.pygame.org/docs/ref/rect.html#pygame.Rect.colliderect You can use this to test each enemy在移动它们之前,它们是否与任何其他敌人重叠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM