как сделать прямоугольник «sprint»

#python #pygame

#python #pygame

Вопрос:

 import pygame

width = 500
height = 500
win = pygame.display.set_mode((width, height))
pygame.display.set_caption("Client")
running = False

clientNumber = 0

class Player():
    def __init__(self, x, y, width, height, color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = (x, y, width, height)
        self.vel = 3

    def draw(self, win):
        pygame.draw.rect(win, self.color, self.rect)

    def move(self):
        keys = pygame.key.get_pressed()
        running = bool

        if keys[pygame.K_LEFT]:
            self.x -= self.vel

        if keys[pygame.K_RIGHT]:
            self.x  = self.vel

        if keys[pygame.K_UP]:
            self.y -= self.vel

        if keys[pygame.K_DOWN]:
            self.y  = self.vel

        if keys[pygame.K_a] and not running:
            self.vel  = 3
            running = True

        if not keys[pygame.K_a]:
            running = False


        self.rect = (self.x, self.y, self.width, self.height)



def redrawWindow(win, player):

    win.fill((255, 255, 255))
    player.draw(win)
    pygame.display.update()


def main():
    run = True
    p = Player(50, 50, 100, 100, (0, 0, 255))
    clock = pygame.time.Clock()

    while run:
        clock.tick(60)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
                pygame.quit()

        p.move()
        redrawWindow(win, p)

main()
  

Мне удалось создать прямоугольную вещь, которую можно перемещать с помощью ввода с клавиатуры.
и теперь я хочу изменить скорость прямоугольника, например, при нажатии «a» скорость изменится с 3 на 6.
но я понятия не имею, как это сделать.
Я попытался создать «работающую» переменную bool, чтобы ускорить ее только при нажатии, а не при нажатии.
Но все мои усилия пошли не так.

Ответ №1:

Вычислите текущую скорость ( current_vel ), зависящую от состояния ключа a. Используйте current_vel для перемещения проигрывателя вместо self.vel :

 class Player():
    # [...]

    def move(self):
        keys = pygame.key.get_pressed()

        current_vel = self.vel
        if keys[pygame.K_a]:
            current_vel  = 3

        if keys[pygame.K_LEFT]:
            self.x -= current_vel 
        if keys[pygame.K_RIGHT]:
            self.x  = current_vel 
        if keys[pygame.K_UP]:
            self.y -= current_vel 
        if keys[pygame.K_DOWN]:
            self.y  = current_vel 

        self.rect = (self.x, self.y, self.width, self.height)