酸洗的pygame时钟

时间:2016-07-10 22:45:17

标签: python serialization pygame pickle pygame-clock

我目前正在考虑使用使用shelve的{​​{1}}模块制作的小型RPG实现保存功能。

在发现我无法腌制pygame表面后,我遵循建议将字典键作为我的对象属性传递。 一旦我花了几个小时修复游戏,系统地检查所有表面并实际启动并运行启动菜单,我得到一条新消息错误,说明pygame时钟对象也无法序列化。令我沮丧的是,因为与表面不同,我不能预先创建我需要的所有时钟,因为我使用了很多特定于给定对象的攻击计时器,动画计时器,AI计时器等等。 I.e而不是为我的所有精灵都有一个攻击计时器,我每个都有一个,所以我有更多的灵活性。此外,时钟的数量将取决于我创建的对象的数量,并且在某种程度上,该数量是随机的。在保持面向对象的结构时,我真的想不出办法,即避免生成1000s计时器并链接到对象。

所以回顾一下我实际拥有的问题:

1)我怎样才能pickle pygame计时器?

2)如果不可能你推荐什么替代方案?

3)在花费更多时间实现这个保存功能之前,还有哪些其他pygame对象不可序列化,或者我在哪里可以找到这些信息?

我知道我问了很多,但是我花了很多时间将这些表面排序,只是为了与定时器有相同的问题并想知道接下来会发生什么,我感到非常沮丧...虽然我猜这是学习的全部内容;)

1 个答案:

答案 0 :(得分:2)

我相信你可能会试图以错误的方式解决你的问题。我想说的是,您应该坚持只以字典的形式保存实际需要的数据,而不是尝试直接序列化python对象。

当你真的需要使用多个pygame时钟时,我无法想到这种情况。我不知道你的具体情况,但我会推荐这样的结构。

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

attack_clock1 = {'time_interval': 10, 'time': 0}
attack_clock2 = {'time_interval': 20, 'time': 0}
clocks = [attack_clock1, attack_clock2]

while True:
    #perform game logic here

    #use time variable to run other "clocks"
    #example
    for c in clocks:
        if condition:
            c['tick'] += 1
            if c['tick'] > c['time_interval']:
                #do something

    time += 1

    clock.tick(FPS)

同样,我不知道你的具体情况,但我希望你能从这种结构中收集一些有用的东西。这种建议可能更适合评论,但我没有足够的声誉这样做。祝你好运!