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]
这是精灵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]