我为我的pygame创建了一个简单的分数系统。但它暂停了比赛。我知道这是因为time.sleep但我不知道如何解决它。
得分系统每5秒+100,而start为true,代码:
while start == True:
time.sleep(5)
score = score + 100
包含缩进的完整代码:http://pastebin.com/QLd3YTdJ 代码:156-158
谢谢
答案 0 :(得分:3)
不要使用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秒怎么办?)但这是一般的想法。这通常称为“增量时间”游戏计时器实现。
答案 1 :(得分:2)
如果我理解正确,你不希望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秒运行一次该线程创建一个线程。
您可能需要对该功能进行一些更改才能使其正常工作,但至少应该让您开始:)。