多次按下要在pygame中移动图像的键

问题描述 投票:1回答:1

虽然我正在学习如何在pygame中移动图像,但是当我按住一个键(任意一个:上,下,左,右)来移动图像(赛车)时,即使按住该键,图像也只能移动一次。该键应该可以使图像移动沿特定方向连续移动,但是只能移动一个单位。我发现的解决方法是,用于更改原始位置(x_vary和y_vary,原始位置:x和y)的变量的声明未添加到游戏的主while循环中。

我的问题是为什么?为什么在声明x_vary和y_vary的地方有所不同

这里是未固定的代码:

import pygame

pygame.init()

clock = pygame.time.Clock()

game_window = pygame.display.set_mode((800, 600))
game_icon = pygame.image.load('icon2.jpg')
game_caption = pygame.display.set_caption('Racecar Game')

x = 800 * 0.45
y = 600 * 0.08

racecar = pygame.image.load('racecar.png')

def car(x, y):
    game_window.blit(racecar,(x,y)) 

game_run = False

while game_run == False:

    x_vary = 0
    y_vary = 0

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_run = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x_vary = -10
            elif event.key == pygame.K_RIGHT:
                x_vary = +10
            elif event.key == pygame.K_UP:
                y_vary = -10
            elif event.key == pygame.K_DOWN:
                y_vary = +10
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                x_vary = 0
                y_vary = 0

    x += x_vary
    y += y_vary

    game_window.fill((128, 0, 0))
    car(x, y)

    pygame.display.update()
    clock.tick(60)

pygame.quit()
quit()
python pygame key repeat keyboard-events
1个回答
0
投票

键盘事件(pygame.KEYDOWNpygame.KEYUP)仅在按下或释放一个键时发生一次。

如果在主应用程序循环中声明了x_vary = 0y_vary = 0,则在按下按钮时将它们置位,但是在下一帧中将立即将它们重新初始化(0)。您必须再次按下按钮进行设置。

如果在主应用程序循环之前声明了x_vary = 0y_vary = 0,则它们将保留在按下按钮时设置的值。如果释放按钮,则两个按钮均设置为0。

使用pygame.key.get_pressed(),评估是否按下了键的状态。 pygame.key.get_pressed()获取所有键盘按钮的状态,并且只要按下键盘,键的状态为pygame.key.get_pressed()。例如:

True
© www.soinside.com 2019 - 2024. All rights reserved.