多次按下键可移动 pygame 中的图像
Key to be pressed multiple times to move image in pygame
当我学习如何在 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()
获取所有键盘按钮的状态,只要按下键盘,一个键的状态就是 True
。例如:
game_run = False
while game_run == False:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_run = True
keys = pygame.key.get_pressed()
x_vary, y_vary = 0, 0
if keys[pygame.K_LEFT]:
x_vary = -10
if keys[pygame.K_RIGHT]:
x_vary = +10
if keys[pygame.K_UP]:
y_vary = -10
if keys[pygame.K_DOWN]:
y_vary = +10
x += x_vary
y += y_vary
game_window.fill((128, 0, 0))
car(x, y)
pygame.display.update()
clock.tick(60)
当我学习如何在 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()
获取所有键盘按钮的状态,只要按下键盘,一个键的状态就是 True
。例如:
game_run = False
while game_run == False:
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_run = True
keys = pygame.key.get_pressed()
x_vary, y_vary = 0, 0
if keys[pygame.K_LEFT]:
x_vary = -10
if keys[pygame.K_RIGHT]:
x_vary = +10
if keys[pygame.K_UP]:
y_vary = -10
if keys[pygame.K_DOWN]:
y_vary = +10
x += x_vary
y += y_vary
game_window.fill((128, 0, 0))
car(x, y)
pygame.display.update()
clock.tick(60)