Pygame (Python) – TypeError: El argumento debe ser un objeto de estilo recto

Esto es bastante frustrante, estoy tratando de hacer un juego de romper ladrillos en Pygame (Python) Pero estoy atascado en un error. He estado tratando durante las últimas horas para resolver esto, pero todavía no lo he hecho.

Entonces, por favor, trate de ayudarme, realmente me gustaría continuar progtwigndo esto, en lugar de quedarme atascado en este error …

CÓDIGO:

import pygame, sys, time, random from pygame.locals import * pygame.init() fpsclock = pygame.time.Clock() WINDOWWIDTH = 450 WINDOWHEIGHT = 650 mainwindow = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32) pygame.display.set_caption('Luzion - Brick Breaker') paddle = pygame.image.load('Brick Breaker - Paddle.png') paddlerect = paddle.get_rect() paddlerect.topleft = (190, 575) ball = pygame.image.load ('ball.png') ballrect = ball.get_rect() ballrect.topleft = (195, 565) cooltext = pygame.image.load('cooltext1.png') cooltextrect = cooltext.get_rect() cooltextrect.topleft = (0, 0) BLACK = (0, 0, 0) WHITE = (255, 255, 255) RED = (255, 0, 0) GREEN = (0, 128, 0) BLUE = (0, 0, 255) LIME = (0, 255, 0) TEXTCOLOR = WHITE font = pygame.font.SysFont(None, 48) def displaytext(text, font, surface, x, y): text = font.render(text, 1, TEXTCOLOR) textrect = text.get_rect() textrect.topleft = (x, y) surface.blit(text, textrect) def waitforplayer(): while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() sys.exit() return rb = pygame.image.load('redblock.png') rbrect = rb.get_rect().topleft = (0, 0) rb1rect = rb.get_rect().topleft = (40, 0) rb2rect = rb.get_rect().topleft = (80, 0) level1rects = [rbrect, rb1rect, rb2rect] moveleft = False moveright = False SPEED = 7 bmoveup = bmovedown = bmoveleft = bmoveright = False BALLSPEED = 8 mainwindow.blit(cooltext, cooltextrect) pygame.display.update() time.sleep(1) displaytext('Level 1', font, mainwindow, 150, 100) pygame.display.update() time.sleep(1) displaytext('Press any key to begin...', font, mainwindow, 22, 200) pygame.display.update() waitforplayer() while True: number = 1 for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if event.key == ord('a') or event.key == K_LEFT: moveleft = True moveright = False if event.key == ord('d') or event.key == K_RIGHT: moveleft = False moveright = True if event.key == ord('g'): bmoveup = True if number == 1: bmoveleft = True else: bmoveright = True if event.type == KEYUP: if event.key == ord('a') or event.key == K_LEFT: moveleft = False if event.key == ord('d') or event.key == K_RIGHT: moveright = False if moveleft and paddlerect.left > 0: paddlerect.left -= SPEED if moveright and paddlerect.right < WINDOWWIDTH: paddlerect.right += SPEED if bmovedown and ballrect.bottom  0: ballrect.top -= BALLSPEED if bmoveleft and ballrect.left > 0: ballrect.left -= BALLSPEED if bmoveright and ballrect.right < WINDOWWIDTH: ballrect.right += BALLSPEED if ballrect.top <= 0: bmovedown = not bmovedown bmoveup = not bmoveup if ballrect.left = WINDOWWIDTH: bmoveleft = not bmoveleft bmoveright = not bmoveright if ballrect.bottom >= WINDOWHEIGHT: bmovedown = not bmovedown bmoveup = not bmoveup mainwindow.fill(WHITE) mainwindow.blit(paddle, paddlerect) mainwindow.blit(ball, ballrect) for b in range(len(level1rects)): mainwindow.blit(rb, level1rects[b]) for x in level1rects: if ballrect.colliderect(x): level1rects.remove(x) bmovedown = not bmovedown bmoveup = not bmoveup bmoveleft = not bmoveleft bmoveright = not bmoveright if ballrect.colliderect(paddlerect): bmovedown = not bmovedown bmoveup = not bmoveup bmoveleft = not bmoveleft bmoveright = not bmoveright pygame.display.update() fpsclock.tick(35) 

ERROR:

 Traceback (most recent call last): File "C:\Python32\brick breaker", line 139, in  if ballrect.colliderect(x): TypeError: Argument must be rect style object 

Prueba este código:

 rb = pygame.image.load('redblock.png') rbrect = rb.get_rect() rbrect.topleft = (0, 0) rb1rect = rb.get_rect() rb1rect.topleft = (40, 0) rb2rect = rb.get_rect() rb2rect.topleft = (80, 0) 

Mire dónde define level1rects :

 rbrect = rb.get_rect().topleft = (0, 0) rb1rect = rb.get_rect().topleft = (40, 0) rb2rect = rb.get_rect().topleft = (80, 0) level1rects = [rbrect, rb1rect, rb2rect] 

x en cada iteración del bucle es una coordenada, no un rectángulo, de ahí el error.