Pygame:在 类 中使用 colliderect

Pygame: Using colliderect in classes

这是精灵class:

class Minion(pygame.sprite.Sprite):


  def __init__(self, x, y):

      pygame.sprite.Sprite.__init__(self)
      self.color = tuple([random.randrange(0, 256), random.randrange(0,   256), random.randrange(0, 256)])
      self.x = x
      self.y = y
      self.minion = pygame.Rect(self.x, self.y, 15, 25)
      pygame.draw.rect(SCREEN, self.color, (self.x, self.y, 15, 25))

这是用于塔防游戏的代码。现在如果想知道一个 Minion 是否与另一个使用像 colliderect 这样的函数为每个 Minion 的 Rect 对象发生碰撞,我该怎么做?

此外,如果有另一个 class 发射子弹(Rect objects),我将如何检测它们与 Minion 之间的碰撞?

不胜感激。 谢谢

您可能知道每个精灵都包含一个 image(绘制在表面上)和一个 rect 对象(设置图像的位置和大小 (!))。

__init__ 方法中为您的精灵添加一个 rect 对象。这很简单,因为 pygame.draw.anyObject() 方法 returns 总是一个 rect 代表绘制对象的位置和大小的实例:

self.collideRect = pygame.draw.rect(SCREEN, self.color, (self.x, self.y, 15, 25))

因此您不需要 self.minion = pygame.Rect(self.x, self.y, 15, 25).

这一行

要检查 一个小兵(即 rect 对象)是否与另一个小兵发生碰撞,您可以在主游戏循环中执行如下操作:

if minion1.collideRect.colliderect(minion2.collideRect) == True:
    pass #do something

如果您有 多个对象(例如,名为 objList 的列表中的小兵或子弹),您可以改用 .collidelist() 方法。此方法returns index 的第一个碰撞发现。如果没有发现冲突 -1 返回:

colIndex = minion1.collideRect.collidelist([obj.collideRect for obj in objList])
#do something with the object in objList[colIndex]