GPIO引脚和pygame

时间:2016-08-23 02:48:49

标签: python-2.7 raspberry-pi pygame raspbian gpio

我打算用gpio按钮用pygame制作游戏。这是代码:

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():循环中放置一个print语句,这样循环就像这样:

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

2 个答案:

答案 0 :(得分:1)

有两种方法可以关闭pygame窗口。

  1. 在while循环结束后简单地写
     
    import sys
    while 1:
         .......
    pygame.quit()
    sys.exit()
    
  2. 2.而不是放置一个break语句,在as之后立即替换break for for循环

    while 1:
    for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
    ......
    

答案 1 :(得分:0)

你需要制作一个事件,你需要退出pygame

viewDidLoad