簡體   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