使用Pygame和Pickle加载之前经过的时间

3

我正在制作一个非常依赖经过时间的游戏。我的当前实现基于pygame.time.get_ticks(),非常简单易用。以下是一个小例子:

if event.type == DISPTIMER:
        time = int(pygame.time.get_ticks()/1000)
        timeObj = buttonFont.render(str(time) + ' seconds since start', False, black)
        windowSurfaceObj.blit(timeObj, (450, 50))

然而,我不确定如何进行pickling。我已经在pygame的文档中搜索了所有内容,但找不到任何将写入pygame时间模块的方法。 我可以使用时钟(clock),但我无法找到任何不重置时钟值的读取时钟值的方法,这使其不适合我的用途。

有没有什么方法可以避免笨拙的解决方法来实现这一点呢?


2
在PyGame中,你无法覆盖时间。 - furas
1
你可能需要将保存的时间进行序列化(pickle),并将其添加到get_ticks()返回的时间中,尽管这可能属于“笨拙的解决方法”类别。 - dano
是的,我明白了。我想我正在寻找的是除了pygame的时间之外,还有什么其他的输入可以使用,这些输入非常适合pygame的时间所擅长的任务,但可以被pickled和loaded。编辑: Dano,那似乎是一个可能的选择。我可能只需要额外的一行代码和变量就可以让它工作。 - Bea Corfman
你想通过这个做什么?能详细说明一下吗? - Bartlomiej Lewandowski
这是一款闲置游戏。经过的时间主要作为用户反馈,我想向玩家报告他们已经玩了多长时间。从可用性的角度来看,这是一个有用的指标,也与竞争相关。此外,在经过一定秒数后,游戏中会发生某些事情,当加载游戏时恢复经过的时间可以防止通过保存和加载改变游戏结果和行为。这也可以通过单独的计时器实现,但在许多事物都计时的游戏中,这是不方便的。 - Bea Corfman
1个回答

1

好的,我想我明白你想做什么了。

如果我没错的话,你想要能够加载和保存从游戏开始以来的时间。为此,你可以使用pygame.time.Clock和一个额外的变量来存储passed_ticks

以下是一个示例:

passed_ticks = 0
clock = pygame.time.Clock()

# somewhere in your main loop
passed_ticks += clock.tick()

# printing becomes
if event.type == DISPTIMER:
    time = int(passed_ticks/1000)
    timeObj = buttonFont.render(str(time) + ' seconds since start', False, black)
    windowSurfaceObj.blit(timeObj, (450, 50))

现在,您可以随时保存和加载 passed_ticks 变量。

我最终做了类似于dano建议的事情:time = int((pygame.time.get_ticks()+savedTime)/1000)。但还是谢谢! - Bea Corfman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接