【问题标题】:PyGame: Two Sprites In Same List CollidePyGame:同一列表中的两个精灵碰撞
【发布时间】:2014-01-20 19:35:33
【问题描述】:

在我正在制作的游戏中,我试图让同一列表中的敌人不会相互碰撞。我用来尝试让它工作的代码在这里:

for m in self.meteors:
    if pygame.sprite.collide_rect(m, m):
        self.velX = 0
    else:
        self.velY = 0

我不知道为什么这不起作用。它询问两颗流星是否发生碰撞并停在那里 X 速度或 Y 速度。任何帮助将不胜感激。

【问题讨论】:

  • 您确定要将m 传递给碰撞函数两次吗?其中一个应该是self吗?
  • 它在做什么,检查同一个流星是否占据了同一个空间,如果是,它把它的 velX 设置为 0。这永远不会达到 velY,因为同一个物体会与自己发生碰撞。你能详细说明你想做什么吗?
  • 我试图阻止流星相互碰撞,但继续朝另一个方向移动,所以如果它与流星的顶部/底部相撞,它只会向相反的方向移动或继续移动X 速度。
  • 如果我做 self 我会收到关于 rect 的错误,所以我认为它必须是 (m, m)

标签: python python-2.7 python-3.x pygame


【解决方案1】:

你不应该使用双循环吗?

for index1, meteor1 in enumerate(self.meteors):
    for index2, meteor2 in enumerate(self.meteors):
        if index1 != index2:
            if pygame.sprite.collide_rect(meteor1, meteor2):
                self.velX = 0
            else:
                self.velY = 0

【讨论】:

  • 感谢您的回答,我会看看它是否能解决我的问题。再次感谢
  • 但我只是看了顶部。我正在使用超过 1 颗流星。那么我不必为每颗流星都这样做吗?
  • 第一个循环遍历你的流星,第二个循环再次遍历它们,检查以确保你没有检查同一个流星,然后检查碰撞。剩下的就是你的代码了。
  • 好的,谢谢你帮我解决这个问题。现在将尝试。
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 2017-09-14
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
相关资源
最近更新 更多