我有一个Background Class,看起来像这样:
class Background(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.left = Background_Line(10, WIN_HEIGHT, 175, 0)
self.right = Background_Line(10, WIN_HEIGHT, 450, 0)
self.base = Background_Line(275, 5, 175, WIN_HEIGHT - 5)
background.add(self.left, self.right, self.base)
它由三条线组成,形成如此| _ |的形状
我正在尝试实现碰撞,这样当玩家与其中一个碰撞时,我能够做出不同的反应 . 例如,如果左边的线被碰撞,则玩家不能向左移动等等 . 这是我的Background_Line类:
class Background_Line(pygame.sprite.Sprite):
def __init__(self, width, height, posX, posY):
super().__init__()
self.image = pygame.Surface([width, height])
self.image.fill(RED)
self.rect = self.image.get_rect()
self.rect.x = posX
self.rect.y = posY
目前我正在使用精灵组来检测播放器和背景之间的冲突 . 每个背景行都存储为精灵组中的单个精灵 . However, my specific issue is that upon collision I do not know how to determine which of these lines have been collided with. 我查看了Pycharm调试器,但发现它非常令人困惑 . 我想出的一个可能的解决方案就是将它们分别存储在各个精灵组中(例如,left_background sprite group,right_background sprite group)但这看起来并不优雅,如果我想扩大尺寸则不可行的背景 .
1 回答
你的
Background
类不是精灵,因为它没有图像和矩形 . 但它包含精灵,因此精灵组会更合适 . 如果您需要其他功能或只使用普通组,您可以子类化pygame.sprite.Group
.关于这些行,你可以给它们一个
side
属性并检查你的主循环,例如if line.side == 'left':
如果一条线与玩家发生碰撞 . 这是一个完整的例子: