Как мне исправить движение в моем скрипте Pygame? - PullRequest
2 голосов
/ 01 апреля 2020

Я пытаюсь сделать копию для понга в pygame для моего первого проекта, но когда я пытаюсь переместить мои весла, они растягиваются вместо этого. Я думаю, причина в том, что он создает новый прямоугольник каждый раз, когда я пытаюсь его переместить, но я не могу понять, почему. Пожалуйста, ознакомьтесь с кодом и помогите исправить мою ошибку. Вот мой код:

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()

1 Ответ

1 голос
/ 01 апреля 2020

Перед рисованием нового rect необходимо заполнить экран цветом фона, чтобы удалить старый rect. В противном случае старое все еще рисуется там, а вы просто рисуете новое поверх старого. Это как рисование новой картины на старой.

screen.fill(color, rect) должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...