0

我为我的 pygame 创建了一个简单的评分系统。但它正在暂停游戏。我知道这是因为 time.sleep 但我不知道如何解决。

当 start 为真时,分数系统是每 5 秒 +100,代码:

while start == True:
   time.sleep(5)
   score = score + 100 

带缩进的完整代码:http ://pastebin.com/QLd3YTdJ 代码行:156-158

谢谢

4

2 回答 2

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 秒怎么办?)但这是一般的想法。这通常称为“增量时间”游戏计时器实现。

于 2012-04-26T20:44:05.873 回答
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 秒为您创建一个运行该函数的线程。

您可能需要对该功能进行一些更改以使其工作,但它至少应该让您开始:)。

于 2012-04-26T20:48:13.007 回答