Pygame:在类中使用colliderect

时间:2015-03-07 15:39:47

标签: python python-2.7 pygame

这是精灵类:

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的Rect对象是否使用像colliderect这样的函数与另一个Minion相撞,我该怎么做?

另外,如果还有另一个射击子弹(Rect对象)的类,我如何检测它们与Minion之间的碰撞?

帮助将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:0)

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

rect方法中为精灵添加__init__个对象。这很简单,因为pygame.draw.anyObject()方法总是返回一个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()方法。此方法返回找到的第一个碰撞的索引。如果未找到任何冲突,则返回-1

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