¿Cómo arreglo movimiento en mi guión pygame?

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 rectusted 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.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=388260&siteId=1
Recomendado
Clasificación