微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

退出算法pygame无法正常工作

如何解决退出算法pygame无法正常工作

在这种情况下,我希望程序在按下退出按钮时关闭,但是如果启用Check_Key_Press()功能 Close() 功能有效,但是如果我注释掉Check_Key_Press()函数,它将再次起作用。

import pygame

pygame.init()
width,height = 500,500
win = pygame.display.set_mode((width,height))
pygame.display.set_caption("Tic Tac Toe(GUI)")
clock = pygame.time.Clock()

white = (255,255,255)
red = (255,0)
green = (0,0)
blue = (0,255)

Tile_dime = 59
Diff = (Tile_dime+1)/2
board_det = [['-',(width/2-3*Diff,height/2-3*Diff)],['-',(width/2-Diff,(width/2+Diff,height/2-Diff)],height/2+Diff)],height/2+Diff)]]

def draw_board():
    for i in range(len(board_det)):
        pygame.draw.rect(win,white,[board_det[i][1],(Tile_dime,Tile_dime)])

def Close():
    global run
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

def Check_Key_Press():
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            pass
            if event.key == pygame.K_LEFT:
                pass

run = True
while run:
    clock.tick(60)
    draw_board()
    Check_Key_Press()
    Close()
    pygame.display.update()

解决方法

pygame.event.get()获取所有消息并将其从队列中删除。如果在多个事件循环中调用pygame.event.get (),则只有一个循环接收事件,但绝不会所有循环都接收所有事件。结果,似乎缺少一些事件。

获取事件一次并在多个循环中使用它们,或将列表或事件传递给处理事件的函数和方法:

def Close(event_list):
    global run
    for event in event_list:
        if event.type == pygame.QUIT:
            run = False
def Check_Key_Press(event_list):
    for event in event_list:
        if event.type == pygame.KEYDOWN:
            pass
            if event.key == pygame.K_LEFT:
                pass
run = True
while run:
    clock.tick(60)
    event_list = pygame.event.get()
    draw_board()
    Check_Key_Press(event_list)
    Close(event_list)
    pygame.display.update()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。