Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 对于pygame.event.get()中的事件:不工作_Python 3.x_Pygame - Fatal编程技术网

Python 3.x 对于pygame.event.get()中的事件:不工作

Python 3.x 对于pygame.event.get()中的事件:不工作,python-3.x,pygame,Python 3.x,Pygame,我有以下代码: while OS_ON: for event in pygame.event.get(): if event.type == pygame.QUIT: OS_ON = False if event.type == pygame.MOUSEBUTTONDOWN: x, y = pygame.mouse.get_pos() if x > 63 and x < 143 and y > 298 and y

我有以下代码:

while OS_ON:
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        OS_ON = False
    if event.type == pygame.MOUSEBUTTONDOWN:
        x, y = pygame.mouse.get_pos()
        if x > 63 and x < 143 and y > 298 and y < 378:
            Calculator = True
            while Calculator:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        OS_ON = False
                    if event.type == pygame.MOUSEBUTTONDOWN:
                        x, y = pygame.mouse.get_pos()
                        if x > 180 and x < 218 and y > 670 and y < 708:
                            Calculator = False
操作系统打开时的
:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
OS_ON=False
如果event.type==pygame.MOUSEBUTTONDOWN:
x、 y=pygame.mouse.get_pos()
如果x>63,x<143,y>298,y<378:
计算器=真
而计算器:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
OS_ON=False
如果event.type==pygame.MOUSEBUTTONDOWN:
x、 y=pygame.mouse.get_pos()
如果x>180,x<218,y>670,y<708:
计算器=假

在我的第一个循环中,pygame.event.get()中事件的
起作用,但当我在第二个循环中再次使用它时,我就不再起作用了。您知道如何修复它,使其在booth循环中工作。

在Python3.x中,
pygame.event.get()
是一个生成器,因此一旦您从中检索到一个值,它就永远消失了。您可以先尝试将其内容保存到列表中:

while OS_ON:
    events = list(pygame.event.get())
    for event in events:
        if event.type == pygame.QUIT:
            OS_ON = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            x, y = pygame.mouse.get_pos()
            if x > 63 and x < 143 and y > 298 and y < 378:
                Calculator = True
                while Calculator:
                    for event2 in events: # 'event' is used in the outer loop
                        if event2.type == pygame.QUIT:
                            OS_ON = False
                        if event2.type == pygame.MOUSEBUTTONDOWN:
                            x, y = pygame.mouse.get_pos()
                            if x > 180 and x < 218 and y > 670 and y < 708:
                                Calculator = False
操作系统打开时的
:
events=list(pygame.event.get())
对于事件中的事件:
如果event.type==pygame.QUIT:
OS_ON=False
如果event.type==pygame.MOUSEBUTTONDOWN:
x、 y=pygame.mouse.get_pos()
如果x>63,x<143,y>298,y<378:
计算器=真
而计算器:
对于events中的event2:#“event”用于外部循环
如果event2.type==pygame.QUIT:
OS_ON=False
如果event2.type==pygame.MOUSEBUTTONDOWN:
x、 y=pygame.mouse.get_pos()
如果x>180,x<218,y>670,y<708:
计算器=假

但是如果你真的需要做这样的事情,那么你真的需要重新设计你的代码,使它在每一帧中只使用一个
pygame.event.get()

当你发现自己在pygame.event.get():中重复类似
的行时,您可能应该考虑以更基本的方式重构代码。例如,创建函数而不是一个大的嵌套循环。@jDo你能给我一个函数的例子吗?上面有多个pygame问题,可以做类似的事情,并包含很多漂亮的代码。搜索就会发现。缩进是错误的。你的解释是错误的。为Python3.x发布时,
pygame.event.get()
没有任何变化。它仍然返回一个简单的列表。啊,我确实看到了我自己,看起来你是对的。可能
pygame.event.get()
刷新列表后返回列表;就像使用
SDL\u PumpEvents()
时发生的情况一样。如果你知道那可能是什么,如果你能分享你的知识,我将不胜感激。