首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pygame不会更新键盘事件,只会更新鼠标

Pygame不会更新键盘事件,只会更新鼠标
EN

Stack Overflow用户
提问于 2019-10-02 23:52:52
回答 1查看 63关注 0票数 2

我正在尝试移动一个图像,并想按下键盘上的某个键来动态地在窗口中移动。

我在下面这样做,但请注意,只有当我按下键盘键并移动鼠标时,图像才会移动:

代码语言:javascript
运行
复制
import sys
import pygame

UP = False
DOWN = False
LEFT = False
RIGHT = False

pygame.init()
screen = pygame.display.set_mode((800, 600))

clock = pygame.time.Clock()    
img = pygame.image.load('tank.png')

tank = [(img), (50, 50)]

while True:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                UP = True
            elif event.key == pygame.K_DOWN:
                DOWN = True
            elif event.key == pygame.K_LEFT:
                LEFT = True
            elif event.key == pygame.K_RIGHT:
                RIGHT = True

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_UP:
                UP = False
            elif event.key == pygame.K_DOWN:
                DOWN = False
            elif event.key == pygame.K_LEFT:
                LEFT = False
            elif event.key == pygame.K_RIGHT:
                RIGHT = False

        if (UP):
            tank = [tank[0], (tank[1][0], tank[1][1] - 10)]
        elif (DOWN):
            tank = [tank[0], (tank[1][0], tank[1][1] + 10)]
        elif (LEFT):
            tank = [tank[0], (tank[1][0] - 10, tank[1][1])]
        elif (RIGHT):
            tank = [tank[0], (tank[1][0] + 10, tank[1][1])]

    screen.fill((0,0,0))
    screen.blit(tank[0], tank[1])
    pygame.display.update()

我不希望发生这种情况,我只想按下键盘键,无论鼠标是否穿过窗口,都可以自由移动图像。

我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-03 00:09:02

您的问题很简单-您的移动代码不是外部while的一部分,而是内部事件循环的一部分。这导致移动仅在事件发生的情况下执行。鼠标或键盘不相关。请参阅以下内容,以获取改进后的工作版本:

代码语言:javascript
运行
复制
import sys
import pygame

def main():
    pressed = set()

    pygame.init()
    screen = pygame.display.set_mode((800, 600))

    clock = pygame.time.Clock()
    img = pygame.image.load('tank.jpg')

    tank = [(img), (50, 50)]

    while True:

        clock.tick(60)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()

            if event.type == pygame.KEYDOWN:
                pressed.add(event.key)

            if event.type == pygame.KEYUP and event.key in pressed:
                pressed.remove(event.key)

        if pygame.K_UP in pressed:
            tank = [tank[0], (tank[1][0], tank[1][1] - 10)]
        if pygame.K_DOWN in pressed:
            tank = [tank[0], (tank[1][0], tank[1][1] + 10)]
        elif pygame.K_LEFT in pressed:
            tank = [tank[0], (tank[1][0] - 10, tank[1][1])]
        elif pygame.K_RIGHT in pressed:
            tank = [tank[0], (tank[1][0] + 10, tank[1][1])]

        screen.fill((0,0,0))
        screen.blit(tank[0], tank[1])
        pygame.display.update()

if __name__ == '__main__':
    main()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58205066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档