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 , rect
vous 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.