我正在制作一个平台游戏,在游戏的开始阶段有一个边界,所以玩家不能无缘无故地一直向左走。我决定创建一个名为boundary的类,并将其添加到规则无法通过的列表中。但是,我不断收到此错误: “ AttributeError:“边界”对象没有属性“ rect””。谁能解决这个问题?同样,一种更好的方法也将被接受。谢谢!
class Boundary(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.boundary = pygame.Surface([15,600])
self.boundary.fill(WHITE)
self.boundary.set_colorkey(WHITE)
self.boundary_rect =
self.boundary.get_rect()
self.boundary_rect.x = -50
self.boundary_rect.y = 0
class Level01(Level):
def __init__(self, player):
Level.__init__(self, player)
level_boundary = [Boundary()]
for _ in level_boundary:
boundary = Boundary()
boundary.player = self.player
self.platform_boundary_list.add
(boundary)
class Player(pygame.sprite.Sprite):
def__init__(self):
super().init()
self.rect.x += self.change_x
block_hit_list = pygame.sprite.spritecollide(self,
self.level.platform_boundary_list, False)
for block in block_hit_list:
if self.change_x > 0:
self.rect.right = block.rect.left
elif self.change_x < 0:
self.rect.left = block.rect.right
self.rect.y += self.change_y
block_hit_list = pygame.sprite.spritecollide(self,
self.level.platform_boundary_list, False)
for block in block_hit_list:
if self.change_y > 0:
self.rect.bottom = block.rect.top
elif self.change_y < 0:
self.rect.top = block.rect.bottom
self.change_y = 0
答案 0 :(得分:1)
还没有运行代码,但是错误消息似乎是合理的。您的 Boundary
类具有属性boundary_rect
而不是rect
(似乎不是pygame的Sprite
类直接暴露的属性)。将block.rect
替换为block.boundary_rect
应该可以解决此问题。
更新:
查看您的代码,我发现了几个问题,Player
和Boundary
类都引用了不直接属于其父rect
的{{1}}属性。根据您的评论,我决定将代码重写为演示冲突测试,以不仅修复错误,还提供一些想法,供您考虑如何组织代码。
演示非常简单;一个玩家和一堆随机块被绘制到屏幕上。播放器块在屏幕边缘附近反弹,并且碰撞的块以不同的颜色重新绘制。结果如下:
这是上面演示的代码。我添加了一堆注释来阐明代码的作用。如果有任何不清楚的地方,请通知我:
pygame.sprite.Sprite