键盘事件或其他问题
Issue with keyboard events or other
我正在尝试使用箭头键使一个框在屏幕上四处移动。虽然当我按下箭头键时,没有任何反应。由于我看不到,我哪里做错了,而且我找不到支持 pygame 的可视化工具,我将不得不问你。这是代码:
import pygame, sys
FPS = 60
Clock = pygame.time.Clock()
pygame.init()
SURF = pygame.display.set_mode((600, 700))
pygame.display.set_caption("BOX GAME V1.0")
RED = (255, 0, 0)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
box_x = 50
box_y = 50
box = (box_x, box_y, 50, 50)
while True:
SURF.fill(BLACK)
pygame.draw.circle(SURF, RED, (200, 150), 25)
pygame.draw.rect(SURF, WHITE, box)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
box_x -= 20
elif event.key == pygame.K_RIGHT:
box_x += 20
elif event.key == pygame.K_UP:
box_y -= 20
elif event.key == pygame.K_DOWN:
box_y += 20
pygame.display.update()
Clock.tick(FPS)
我假设游戏运行并且盒子不会移动,尽管您进行了键盘输入。如果我是对的,那么事实是您每次都不会通过 while 循环更新框的位置。
pygame.draw.rect(SURF, WHITE, box)
行引用了您在开始游戏循环之前定义的方框,但该方框的位置不会更新。只需在绘制之前更新框的位置。这可以通过将 box = (box_x, box_y, 50, 50)
移动到游戏循环的顶部来完成。
while True:
box = (box_x, box_y, 50, 50)
SURF.fill(BLACK)
pygame.draw.circle(SURF, RED, (200, 150), 25)
pygame.draw.rect(SURF, WHITE, box)
### key press logic
我正在尝试使用箭头键使一个框在屏幕上四处移动。虽然当我按下箭头键时,没有任何反应。由于我看不到,我哪里做错了,而且我找不到支持 pygame 的可视化工具,我将不得不问你。这是代码:
import pygame, sys
FPS = 60
Clock = pygame.time.Clock()
pygame.init()
SURF = pygame.display.set_mode((600, 700))
pygame.display.set_caption("BOX GAME V1.0")
RED = (255, 0, 0)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
box_x = 50
box_y = 50
box = (box_x, box_y, 50, 50)
while True:
SURF.fill(BLACK)
pygame.draw.circle(SURF, RED, (200, 150), 25)
pygame.draw.rect(SURF, WHITE, box)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
box_x -= 20
elif event.key == pygame.K_RIGHT:
box_x += 20
elif event.key == pygame.K_UP:
box_y -= 20
elif event.key == pygame.K_DOWN:
box_y += 20
pygame.display.update()
Clock.tick(FPS)
我假设游戏运行并且盒子不会移动,尽管您进行了键盘输入。如果我是对的,那么事实是您每次都不会通过 while 循环更新框的位置。
pygame.draw.rect(SURF, WHITE, box)
行引用了您在开始游戏循环之前定义的方框,但该方框的位置不会更新。只需在绘制之前更新框的位置。这可以通过将 box = (box_x, box_y, 50, 50)
移动到游戏循环的顶部来完成。
while True:
box = (box_x, box_y, 50, 50)
SURF.fill(BLACK)
pygame.draw.circle(SURF, RED, (200, 150), 25)
pygame.draw.rect(SURF, WHITE, box)
### key press logic