【问题标题】:Developing my own version of space invaders. I'm trying to find a way to loop my fire button so that when held fires every 0.5 seconds开发我自己的太空入侵者版本。我正在尝试找到一种方法来循环我的开火按钮,以便在按住时每 0.5 秒开火一次
【发布时间】:2019-07-24 09:16:38
【问题描述】:

所以我正在尝试制作一个循环,以便当我的开火按钮被按住时,它每 1/2 秒发射一次。

我已经尝试了 time.wait(0.5),但它使我的整个游戏冻结了 1/2 秒。

这是我尝试过的一些代码

if event.type == KEYDOWN and event.key == K_SPACE:
            fighter.fire()
            time.wait(0.5)
            if event.type == KEYDOWN and event.key == K_SPACE:
                fighter.fire()

我期望的是代码等待 0.5 秒,然后再次拍摄,但我仍在努力让它循环。现在发生的事情是我的游戏冻结了指定的时间,然后恢复,但弹丸是两个相互堆叠的。感谢您的帮助

【问题讨论】:

  • 您在关键事件中使用什么?另外,由于您提到的内容,fire() 中究竟发生了什么?

标签: python time repeat


【解决方案1】:

死机是正常的,time.wait(0.5) 让你的程序休眠半秒。

您应该研究多线程,或者如果您的循环结构允许您可以只存储:

import time
previous = time.time()

在变量中,在循环的下一次迭代中,如果

time.time() - previous > 0.5

然后你开火。

希望对你有帮助

【讨论】:

    【解决方案2】:

    正如@Alex_6 所说,您可以尝试多线程。

    time.wait, time.sleep 冻结了整个程序,所以你可以做任何事情,除非你释放你用来开火的键。

    有一个与此相同的 github 帖子。 https://github.com/drjones2010/space-invaders

    我自己没有尝试过,但值得一读。

    编辑: 这里有一些其他参考资料供您学习Get smooth motion by multi-threading Python turtle graphics

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多