python - 键盘事件或其他问题

标签 python python-3.x pygame keyboard-events

我正在尝试使用箭头键使一个框在屏幕上移动。尽管当我按下箭头键时,什么也没有发生。因为我看不出我哪里做错了,而且我找不到支持 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

关于python - 键盘事件或其他问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37121582/

相关文章:

python - Matplotlib 保存为 pdf 未在条形图中显示阴影线 - 潜在错误?

python - 控制多线程程序中的解释器

python - Pandas 未从 xlsx 文件中读取第一列

python-3.x - 安装 Pygame/Python 3.4.1 时出错

python - 有没有办法使用 python 从目录比较中排除特定文件类型

python - 如何在 Python 2.7 中实现 GMRES 的 ILU 预处理器?

python - 自己制作的游戏。 Game Over 后不执行 Else 分支

Python3 PyGame 如何移动图像?

python-3.x - Python - 具有多个时区的 Pandas 日期时间列

python-3.x - 在 PyGame 2 中播放视频