Контакты GPIO и pygame

Я планирую создать игру с pygame, используя кнопки gpio. Вот код:

from gpiozero import Button
import pygame
from time import sleep
from sys import exit

up = Button(2)
left = Button(3)
right = Button(4)
down = Button(14)

fps = pygame.time.Clock()

pygame.init()

surface = pygame.display.set_mode((1300, 700))

x = 50
y = 50

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            break
    if up.is_pressed:
        y -= 5
    if down.is_pressed:
        y += 5
    if left.is_pressed:
        x -= 5
    if right.is_pressed:
        x += 5
    surface.fill((0, 0, 0))
    pygame.draw.circle(surface, (255, 255, 255), (x, y), 20, 0)
    pygame.display.update()
    fps.tick(30)

Однако, когда я нажимаю кнопку X в верхней части окна, оно не закрывается. Есть ли для этого возможное решение?

РЕДАКТИРОВАТЬ: Все дают один и тот же ответ, что я не добавляю цикл for для проверки событий и выхода. Я поместил это здесь, в свой код:

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            break

Я тоже пробовал sys.exit().

РЕДАКТИРОВАТЬ 2: @Shahrukhkhan попросил меня поместить оператор печати внутри цикла for event in pygame.event.get():, что сделало цикл таким:

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            print "X pressed"
            break

root@raspberrypi:~/Desktop# python game.py
X pressed
X pressed

person Yubin Lee    schedule 23.08.2016    source источник


Ответы (2)


Есть два возможных способа закрыть окно pygame.

  1. after the end of while loop simply write
     
    import sys
    while 1:
         .......
    pygame.quit()
    sys.exit()
    

2. вместо того, чтобы помещать оператор break, замените break в цикле for сразу после while, как

while 1:
for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
......
person Shahrukh khan    schedule 24.08.2016
comment
поместите заявление о печати внутри - person Shahrukh khan; 25.08.2016
comment
Что ты имеешь в виду?? - person Yubin Lee; 25.08.2016
comment
поместите оператор print (X clicked) внутри цикла for сразу после начала тела if и проверьте, печатается ли что-то после нажатия (X) на консоли. - person Shahrukh khan; 25.08.2016
comment
Оказывается, я неправильно использовал sys.exit (). После добавления все заработало. Я не знаю, почему это не сработало с перерывом. Может быть, потому что это было в циклах for и while? - person Yubin Lee; 26.08.2016

Вам нужно сделать событие, и в нем вам нужно выйти из pygame

for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
person Trevor    schedule 23.08.2016