Pygame 主循环外的编程控制

Programming controls outside of the main loop in Pygame

我想做的是在另一个模块中为某个事物定义控件,该模块定义该事物的所有其他内容,然后 运行 通过函数从主循环中进行控件。

尝试用函数调用它的问题,根据我的尝试,函数看到的事件只匹配函数在程序开始时定义的事件而不是当前事件;意思是,没有事件。

这是我的意思的一个例子:

主文件

from pygameinitmodule import *
import othermodule

#event_list = pygame.event.get() is run in pygameinitmodule to define it for all modules

running = True
while running:
    #updating the event_list
    event_list = pygame.event.get()

    if certaingamestate:
        othermodule.controlFunction()

其他模块

from pygameinitmodule import *

def controlFunction():
    global event_list
    for event in event_list:
        # controls here

然后如果我要 运行 代码,控件将不起作用。但是,如果我将函数中的完全相同的代码放入主循环中,它就可以正常工作。有没有另一种方法我应该做这样的事情,或者我在忽略一个关键部分的同时大部分都做对了?

编辑:对于将其标记为重复的人,事实并非如此。您将此标记为重复的问题关注的是另一件事。

您可以将事件列表作为参数传递给函数:

other_module.py

def controlFunction(event_list):
    for event in event_list:
        # do stuff

并且在主循环中这样使用:

main_file.py

while True:
    event_list = pygame.event.get()
    controlFunction(event_list)

或者只是 import pygame 在另一个文件中并在那里获取事件(但是,不建议使用这种方法,因为它会从队列中删除事件并且无法从其他地方检索它们):

other_module.py

import pygame

def controlFunction():
    for event in pygame.event.get():
        # do stuff