为什么我的键盘事件会因为鼠标移动而停止?



我在pygame中有一个程序,它接受鼠标输入和键盘输入,如下所示:

for event in events:
    if event.key == pygame.K_LEFT:
            for k in other:
                k.move(archerspeed, 0)
                k.draw(k.x, k.y)
            for k in arrows:
                Arrow().draw(k[0], k[1])
    if event.key == pygame.K_RIGHT:
            for k in other:
                k.move(-archerspeed, 0)
                k.draw(k.x, k.y)
            for k in arrows:
                Arrow().draw(k[0], k[1])
    if event.key == pygame.K_UP:
            for k in other:
                k.move(0, archerspeed)
                k.draw(k.x, k.y)
            for k in arrows:
                Arrow().draw(k[0], k[1])
    if event.key == pygame.K_DOWN:
            for k in other:
                k.move(0, -archerspeed)
                k.draw(k.x, k.y)
            for k in arrows:
                Arrow().draw(k[0], k[1])
if pygame.mouse.get_pressed()[0] == 1 and time.time() - arrowtime > 1:
    myarcher.shoot(myarcher.x, myarcher.y)
    arrowtime = time.time()

在这个游戏中一切都运行良好,我的对象响应键盘事件,直到鼠标开始移动。当鼠标移动时,无论我怎么用力敲击键盘,都不会发生任何变化。

为什么会这样?有什么办法可以防止这种情况发生吗?

实际情况是鼠标事件完全停止了您的事件。我建议事先使用列表推导将它们过滤掉:

try:
    events = [event for event in events if event.key >= 273 and event.key <= 276]
except AttributeError:
    continue

这确保键是其中一个方向键。否则,将其从事件列表中删除。

希望这对你有帮助!

最新更新