Закройте окно pygame, используя событие keydown, и флаг не работает - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь сделать возможным закрыть окно pygame, нажав клавишу «q». Ошибок нет, но почему-то не работает. Пожалуйста, помогите.

import pygame
screen = pygame.display.set_mode((0,0))
screen_rect = screen.get_rect()
pygame.init()
flag = True

class Ship:
    def __init__(self):
        self.image = pygame.image.load('images/ship.bmp')
        self.rect = self.image.get_rect()
        self.rect.center = screen_rect.center
    def blitme(self):
        screen.blit(self.image,self.rect)

def keydown(event):
    if event.key == pygame.K_q:
        flag = False 

ship = Ship()

while flag:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            flag = False
        elif event.type == pygame.KEYDOWN:
            keydown(event)

    screen.fill((0,0,128))
    ship.blitme()
    pygame.display.flip()

Игра l oop работает, а flag = True. Окно закрытия работает, когда я нажимаю кнопку выхода из окна, но нажатие q не дает никаких результатов.

1 Ответ

0 голосов
/ 13 июля 2020

Если вы хотите записать в переменную в глобальном пространстве имен внутри функции, вы должны использовать оператор global , чтобы интерпретировать переменную как глобальную:

def keydown(event):
    global flag 
    if event.key == pygame.K_q:
        flag = False

Если вы не объявляете переменную как глобальную, в локальной области функции создается локальная переменная (с тем же именем, что и глобальная переменная).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...