【问题标题】:Programming controls outside of the main loop in PygamePygame主循环外的编程控制
【发布时间】:2021-11-14 15:19:10
【问题描述】:

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

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

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

主文件

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

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

编辑:对于将其标记为重复的人,它不是。您将此标记为重复的问题正在关注不同的事情。

【问题讨论】:

    标签: python pygame


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2019-03-13
      • 1970-01-01
      • 2014-02-21
      • 2012-09-05
      • 2021-08-12
      • 1970-01-01
      • 2016-03-26
      • 2018-04-17
      • 1970-01-01
      相关资源
      最近更新 更多