虽然我正在学习如何在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()
键盘事件(pygame.KEYDOWN
,pygame.KEYUP
)仅在按下或释放一个键时发生一次。
如果在主应用程序循环中声明了x_vary = 0
和y_vary = 0
,则在按下按钮时将它们置位,但是在下一帧中将立即将它们重新初始化(0)。您必须再次按下按钮进行设置。
如果在主应用程序循环之前声明了x_vary = 0
和y_vary = 0
,则它们将保留在按下按钮时设置的值。如果释放按钮,则两个按钮均设置为0。
使用pygame.key.get_pressed()
,评估是否按下了键的状态。 pygame.key.get_pressed()
获取所有键盘按钮的状态,并且只要按下键盘,键的状态为pygame.key.get_pressed()
。例如:
True