Rattandeep:
Estoy tratando de hacer una réplica de pong en pygame para mi primer proyecto, pero cuando trato de mover las paletas que se extienden en su lugar. Creo que la razón es que crea un nuevo rect cada vez que intento para moverlo pero parece que no puede entender por qué. Por favor revise el código y ayudar a corregir mi error. Aquí está mi código:
import pygame
W, H = 600, 500
screen = pygame.display.set_mode((W, H))
FPS = 30
class Paddle(pygame.sprite.Sprite):
def __init__(self, x, y, width, height):
super(Paddle, self).__init__()
self.x = x
self.y = y
self.width = width
self.height = height
self.surf = pygame.Surface((width, height))
self.surf.fill((255, 255, 255))
self.rect = self.surf.get_rect()
self.rect.center = (x, y)
def move(self, distance):
self.rect.move_ip(0, distance)
paddleA = Paddle(15, 250, 10, 50)
paddleB = Paddle(585, 250, 10, 50)
allSprites = pygame.sprite.Group()
allSprites.add(paddleA)
allSprites.add(paddleB)
run = True
clock = pygame.time.Clock()
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
run = False
pressedKeys = pygame.key.get_pressed()
if pressedKeys[pygame.K_UP]:
paddleB.move(-5)
elif pressedKeys[pygame.K_DOWN]:
paddleB.move(5)
elif pressedKeys[pygame.K_w]:
paddleA.move(-5)
elif pressedKeys[pygame.K_s]:
paddleA.move(5)
for sprite in allSprites:
screen.blit(sprite.surf, sprite.rect)
pygame.display.update()
clock.tick(FPS)
pygame.quit()
quit()
DamKoVosh:
Antes de sacar el nuevo rect
usted debe llenar la pantalla con el color de fondo, para eliminar el viejo rect
. De lo contrario, el viejo todavía se dibuja allí y que sólo están drenando la nueva sobre la antigua. Su como pintar un nuevo cuadro en una vieja.
screen.fill(color, rect)
debe hacer el truco.