如何防止在pygame中发送垃圾邮件

时间:2020-06-02 12:25:15

标签: python python-3.x pygame

在我的游戏中,子弹滥发存在问题,因为玩家可以在短时间内发射很​​多子弹。如何防止播放器这样做?我应该使用时钟吗?我该如何使用时钟?这是一些代码:

from contextlib import contextmanager

@contextmanager
def open_many(key_path):
    opened_files = {}
    try:
        opened_files = {key: open(path, "w") for key, path in key_path.items()}
        yield opened_files
    finally:
        for f in opened_files.values():
            f.close()


with open_many({"a": "a.txt", "b": "b.txt"}) as file_map:
    for f in file_map.values():
        f.write("header")

Here it is an image of what happens

很抱歉有任何错误

1 个答案:

答案 0 :(得分:3)

默认情况下,Pygame将以您的计算机能够处理的最快速度触发按键事件(这意味着计算机越好,拍摄速度就越快)。在仅在一台计算机上进行测试的旧视频游戏中,这是一个常见问题。

添加“时钟”是解决问题的好方法。例如,如果您希望玩家每半秒射击不超过子弹,则可以获取他射击的当前时间,然后在下一次射击中检查时间,如果少于1/2秒,则不要t射击,否则就射击并用新子弹的时间更新时间。

要获得更多优化,您甚至可能希望完全阻止键盘输入触发“按下按键”事件,而玩家无法射击,但这是一个较小的优化,在小型游戏中不需要。

要在python中操作时间,可以使用时间和日期时间默认模块。如果您有很多时间和日期需要操作,我通常建议使用arrow,因为我认为它要简单一些。

以下是使用datetime比较秒的示例:

#!/usr/bin/env python3

from datetime import datetime

t1 = datetime.strptime("Feb 12 08:02:34 2015", "%b %d %H:%M:%S %Y")
t2 = datetime.strptime("Feb 12 08:02:32 2015", "%b %d %H:%M:%S %Y")

difference = t1 - t2

print(difference.seconds) # 2, in this case

这可以解决您的问题吗?

相关问题