gpt4 book ai didi

python - Pygame 事件处理程序相互干扰?

转载 作者:行者123 更新时间:2023-12-01 01:03:48 24 4
gpt4 key购买 nike

我正在使用 Python 3.7 制作游戏启动器,并且使用 Pygame(“pg”)库。我为可点击文本(“链接”)创建了一个类,并且有一个检查 pg.QUIT 函数的事件处理程序。

我设置了一个 while 循环,从检查 pg.QUIT 的事件处理函数开始,然后在循环中,我有一个类函数来监听链接是否已被单击。

不幸的是,当它们都能够在循环内运行时,它们会相互干扰,并且一些输入会被忽略,例如 pg.MOUSEBUTTONDOWN (这在这里至关重要)。

我尝试禁用事件处理程序(我只是评论了调用它的行),这使它工作;每个输入都被注册。但是,我不想在对象类中检查 pg.QUIT,也不想在事件处理程序中查找特定对象:我想将这些东西分开。

我的类中的代码如下:

(Inside TextObject class)

def link():

for e in pg.event.get():

if e.type == pg.MOUSEBUTTONDOWN and {mouse is over link}:

print('click!')

我的事件处理程序中的代码如下:

def handle():

for e in pg.event.get():

if e.type == pg.QUIT:

running = False

我的while循环中的代码如下:

while running:

handle()

{update screen and draw text}

textObject.link()

clock.tick(fps)

我希望程序监听 pg.QUIT,然后如果没有发生,则继续监听以查看链接是否已被单击。

当我运行它时,程序只打印“click!”在我点击该链接大约二十次之后。看起来几乎是随机的。

我预测这两个函数会互相干扰,我可以使用某种联合函数来修复它,但我真的更愿意让这些函数保持模糊无需在某些文本坐标中进行硬编码,你知道吗?

谢谢。

附注我使用伪代码来提供一些上下文,但我已经确认问题出在我明确编写的代码中。

最佳答案

所有事件处理移至主循环中。您正在丢失事件,因为某些事件正在一个循环中处理(并丢弃未处理的事件),并且在另一个事件循环中类似,但对于其他事件类型。

将事件处理分散到代码的各个部分会使逻辑和调试变得更加困难。理想情况下,在单个位置处理单个逻辑项效果很好。因此,当您遇到用户输入问题时,您只需调试用户输入部分 - 而不是 this-functionthat-function那里文件中的这个东西

当然,如果您需要查看按下了哪个按钮或其他什么,请编写一个函数来执行此操作,然后在单击事件处理期间调用该函数(向其传递鼠标位置)。

while running:
# Handle user input
for e in pg.event.get():

if e.type == pg.QUIT:
running = False

elif e.type == pg.MOUSEBUTTONDOWN:
if {mouse is over link}:
print('click!')

# Handle screen painting
...

关于python - Pygame 事件处理程序相互干扰?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55565012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com