Comment puis-je corriger le mouvement dans mon script pygame?

Rattandeep:

Je suis en train de faire une réplique pong dans pygame pour mon premier projet, mais lorsque je tente de déplacer mes palettes, ils tends la place. Je crois que la raison est qu'il crée une nouvelle rect chaque fois que je tente de le déplacer, mais je ne peux pas sembler comprendre pourquoi. S'il vous plaît examiner le code et aider à corriger mon erreur. Voici mon code:

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:

Avant de dessiner le nouveau , rectvous devez remplir l'écran avec la couleur de fond, de supprimer l'ancien rect. Sinon , l'ancien est toujours dessiné là et vous dessinez tout nouveau sur l'ancien. Son comme la peinture une nouvelle image sur un ancien.

screen.fill(color, rect) devrait faire l'affaire.

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=388258&siteId=1
conseillé
Classement