我正在尝试为简单的平台游戏添加基本的碰撞检测。我有一个类玩家,当玩家与我想要打印的平台碰撞时(“碰撞”)。我使用Platform类创建了所有平台,并将它们附加到我的方法引用collidelistall(平台)以检查冲突的列表。为什么我收到此错误?我的列表包含什么,如果不是rect对象?我已经发布了相关的代码段,但如果需要,我会发布整个内容。
感谢。
class Platform():
def __init__(self, platformx, platformy):
self.x = platformx
self.y = platformy
def draw_platform(self):
pygame.draw.rect(screen, RED, (self.x, self.y, 40, 20))
class Player():
def __init__(self):
self.image = pygame.image.load('C:\\Users\\admin\\Desktop\\Player1.png').convert_alpha()
self.rect = self.image.get_rect()
def display_player(self):
return self.image
def is_collided_with(self):
return self.rect.collidelistall(platforms)
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode(DISPLAY, FLAGS, DEPTH)
pygame.display.set_caption('Rum Islands')
generate = Player()
man = generate.display_player()
platforms = []
loop = True
while loop:
for event in pygame.event.get():
if event.type == QUIT \
or (event.type == KEYDOWN and event.key == K_ESCAPE):
loop = False
if generate.is_collided_with(): #check for collision
print("True")
screen.fill(WHITE)
platform_x = 0
platform_y = 0
for row in level:
for col in row:
if col == "P":
col = Platform(platform_x, platform_y)
col.draw_platform()
platforms.append(col)
platform_x += 15
platform_y += 20
platform_x = 0
答案 0 :(得分:1)
collidelistall
需要对象列表pygame.Rect()
。您的班级Platform
不是pygame.Rect()
,不仅x
和y
,还有其他参数和方法。
所以试试
class Platform(pygame.Rect):
def __init__(self, x, y):
pygame.Rect.__init__(self, x, y, 40, 20)
def draw(self, screen):
pygame.draw.rect(screen, RED, self)
BTW:不要在方法中使用未知变量 - 例如screen
中的draw_platform
。最好将其作为参数发送或在__init__
中设置,以便您可以使用self.screen
。
你不必在任何地方添加单词platform
- 即。 platformx
,platformy
,draw_platform
- 您已将此字称为类名Platform
。如果你要创建新类即。 class House(Platform)
然后看起来很奇怪house.draw_platform(...)