python - 我怎样才能阻止敌人重叠pygame

标签 python algorithm pygame 2d 2d-games

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

目前,当我向他们射击时,子弹会撞到并伤害所有成群的敌人。我希望它是一个宝库,但分散得恰到好处,以至于我无法一次击中每个敌人

It looks like this

Here's a gif of them clumping

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

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

     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"

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

最佳答案

你可以做到 collision detection在敌人之间,以确定哪些太近了。您还需要改变他们的行为,以决定当他们真的靠得太近时该怎么做。

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

如果你无论如何都要比较每个敌人,你有比“碰撞检测”更广泛的选择:比如 Boids算法(改为避免碰撞)。

关于python - 我怎样才能阻止敌人重叠pygame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62484940/

相关文章:

java - Rabin-Karp 哈希码太大

python - Pygame 窗口在 Mac 上无法关闭的问题

python - 合法的 python if 语句?

c++ - 可以使用 pop_back 从 vector 中删除某些值吗?

algorithm - 如何从递归算法中找到递归关系

windows - 我无法使用python播放音频

python - Pygame 井字游戏逻辑?我该怎么做

python - 意料之外的 Python 字典行为

python - Strawpoll.me API 对于我的 Python 程序返回 "400 Bad Request",但可以在终端上运行

python - Pytube : urllib. error.HTTPError: HTTP Error 410: Gone