我为我的 pygame 创建了一个简单的评分系统。但它正在暂停游戏。我知道这是因为 time.sleep 但我不知道如何解决。
当 start 为真时,分数系统是每 5 秒 +100,代码:
while start == True:
time.sleep(5)
score = score + 100
带缩进的完整代码:http ://pastebin.com/QLd3YTdJ 代码行:156-158
谢谢
而不是使用sleep
,它会停止游戏直到时间过去,你想用一个内部计时器来计算已经过去的秒数。当您达到 5 秒时,增加分数,然后重置计时器。
像这样的东西:
scoreIncrementTimer = 0
lastFrameTicks = pygame.time.get_ticks()
while start == True:
thisFrameTicks = pygame.time.get_ticks()
ticksSinceLastFrame = thisFrameTicks - lastFrameTicks
lastFrameTicks = thisFrameTicks
scoreIncrementTimer = scoreIncrementTimer + ticksSinceLastFrame
if scoreIncrementTimer > 5000:
score = score + 100
scoreIncrementTimer = 0
这可以很容易地改进(如果您的帧速率如此之低,帧之间的间隔超过 5 秒怎么办?)但这是一般的想法。这通常称为“增量时间”游戏计时器实现。
如果我对您的理解正确,您不希望while True: score += 100
循环阻止您的整个程序吗?
您应该通过将分数添加到单独的函数来解决它,并使用 APScheduler http://packages.python.org/APScheduler/intervalschedule.html的间隔函数
from apscheduler.scheduler import Scheduler
# Start the scheduler
sched = Scheduler()
sched.start()
# Schedule job_function to be called every 5 seconds
@sched.interval_schedule(seconds=5)
def incr_score():
score += 100
这将导致 APScheduler 每 5 秒为您创建一个运行该函数的线程。
您可能需要对该功能进行一些更改以使其工作,但它至少应该让您开始:)。