在我的游戏中,子弹滥发存在问题,因为玩家可以在短时间内发射很多子弹。如何防止播放器这样做?我应该使用时钟吗?我该如何使用时钟?这是一些代码:
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
很抱歉有任何错误
答案 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
这可以解决您的问题吗?