【问题标题】:Using pygame for ending loops with keypress使用 pygame 通过按键结束循环
【发布时间】:2014-08-12 11:27:28
【问题描述】:

我在 Ubuntu 上使用 PyGame,我想创建一个 while 循环,当用户按下键盘上的任何按钮时结束。

此代码不会离开循环,Eclipse 不会给出错误和警告,但不会离开循环。怎么了?

import time
import pygame
pygame.init()

test = False

while not test:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            print "gotcha"
            test = True;
            break;

    print "Still looping"
    time.sleep(1);



print "made it out of the loop" ;

理想情况下,在我按下任意键之前,每秒钟都应将“仍在循环中”打印到屏幕上,此时应打印“使其脱离循环”。

这不会发生:循环永远继续(直到我终止脚本)。

【问题讨论】:

  • 仅供参考,对于 Python,您不需要在行尾使用分号。这不是无效的,只是不必要的。

标签: python loops pygame keydown


【解决方案1】:

你需要

根据game programming wiki如果您不设置 pygame 显示 pygame 屏幕,则不会有任何输入进入 pygame 的事件处理。

import time

import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('Pygame Caption')

test = False

while not test:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            print "gotcha"
            test = True
            break

    print "Still looping"
    time.sleep(1)

print "made it out of the loop" 

【讨论】:

  • 不用担心,不客气。我不是 pygame 专家,但这似乎是要走的路。
  • 另外,如果您不想要显示,您可以使用虚拟变量,这样您仍然能够在不创建窗口的情况下捕获事件。 Pygame wiki上有一个例子。
  • @elParaguayo,您链接的示例说:“警告:不幸的是,虚拟视频驱动程序无法使用事件,因此您无法在无头模式下使用例如 pygame 键模块。”
  • @Vectornaut:感谢您的评论。我不知道按键,所以您可能是对的,但我认为您仍然可以使用事件队列(例如,在pygame.USEREVENT 上发布和执行操作)。
猜你喜欢
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多