Мой спрайт продолжает двигаться даже после отпускания ключа в Pygame - PullRequest
5 голосов
/ 10 ноября 2019

Мой спрайт продолжает двигаться даже после отпускания ключа. Как я могу остановить движение спрайта, когда я отпускаю клавишу со стрелкой?

Это мой класс спрайтов Paddle. Здесь я дал веслу скорость, и скорость должна быть добавлена ​​к спрайту при нажатии клавиши.

#Paddle sprite
class Paddle(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((90,20))
        self.image.fill(white)
        self.rect = self.image.get_rect()
        self.rect.centerx = (width//2)
        self.rect.bottom = height-15
        self.speedx = 0
     def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.speedx = -5
        if keys[pygame.K_RIGHT]:
            self.speedx = 5
        self.rect.x+=self.speedx

Я добавил все спрайты в группу спрайтов

#All elements of the game
all_sprites = pygame.sprite.Group()
paddle = Paddle()
all_sprites.add(paddle)

Этоосновной цикл. Я думаю, что есть какое-то зацикливание прибавления скорости к спрайту, но я не могу его найти.

#Game mainloop
run=True
while run:
    #FPS of gameplay
    clock.tick(fps)

    #Event mainloop
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
           run=False

    #Updating all objects in the game
    all_sprites.update()

    #On screen
    wn.fill(black)
    all_sprites.draw(wn)

    pygame.display.flip()

pygame.quit()
run=True
while run:

    #Event mainloop
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
           run=False

    #Updating all objects in the game
    all_sprites.update()

    #On screen
    wn.fill(black)
    all_sprites.draw(wn)

    pygame.display.flip()

    pygame.quit()

1 Ответ

3 голосов
/ 10 ноября 2019

Вы должны сбросить скорость (self.speedx), если не нажата ни ВЛЕВО , ни ВПРАВО :

class Paddle(pygame.sprite.Sprite):

    # [...]

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.speedx = -5
        if keys[pygame.K_RIGHT]:
            self.speedx = 5

        if not keys[pygame.K_LEFT] and not keys[pygame.K_RIGHT]:
            self.speedx = 0

        self.rect.x+=self.speedx  

Поскольку при каждом вызове обновленияположение по-прежнему обновляется, и поскольку скорость не сбрасывается, она продолжает двигаться в направлении, которое было установлено ранее.


В качестве альтернативы скорость может быть установлена ​​равной 0 в начале update:

class Paddle(pygame.sprite.Sprite):

    # [...]

    def update(self):

        self.speedx = 0

        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.speedx = -5
        if keys[pygame.K_RIGHT]:
            self.speedx = 5

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