为什么我用pygame写的事件检测,只有当在游戏窗口中按下鼠标不放,才能检测到键盘事件

为什么我用pygame写的事件检测,只有当在游戏窗口中按下鼠标不放,才能检测到键盘事件?


        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        key_pressed = pygame.key.get_pressed()
        if key_pressed[pygame.K_a]:
            self.player.move = True
            self.player.play_x -= 5
            self.player.player =self.player.left
            self.player.rect = self.player.leftrect
        if key_pressed[pygame.K_d]:
            self.player.move = True
            self.player.play_x += 5
            self.player.player = self.player.right
            self.player.rect = self.player.rightrect
        if key_pressed[pygame.K_w]:
            self.player.move = True
            self.player.play_y -= 5
        if key_pressed[pygame.K_s]:
            self.player.move = True
            self.player.play_y += 5
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7413015
  • 你也可以参考下这篇文章:pygame创建游戏窗口秒退和无响应的解决办法
  • 除此之外, 这篇博客: pygame的基础知识详解(主窗口创建、图像绘制、时钟对象和事件响应等知识点),请惠存中的 九、在游戏循环中 监听 事件 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 事件 event:
    就是游戏启动后,用户针对游戏所做的操作
    例如:点击关闭按钮,点击鼠标,按下键盘…

    在 游戏循环 中,判断用户 具体的操作,只有 捕获 到用户具体的操作,才能有针对性的做出响应pygame 中通过 pygame.event.get() 可以获得 用户当前所做动作 的 事件列表

    #初始化时钟对象
    clock = pygame.time.Clock()
    #游戏循环
    while True:
        # 设置屏幕刷新帧率
        clock.tick(60)
        # 事件监听
        for event in pygame.event.get():
            # 判断用户是否点击了关闭按钮
            if event.type == pygame.QUIT:
                print("退出游戏...")
                pygame.quit()
    

    下表是一个常用事件集:

    事件说明
    QUIT用户按下关闭按钮
    KEYDOWN键盘被按下
    KEYUP键盘被放开
    MOUSEMOTION鼠标移动
    MOUSEBUTTONDOWN鼠标按下
    MOUSEBUTTONUP鼠标放开
    VIDEORESIZE窗口缩放