0

我目前正在研究为我使用模块制作的小型 rpg 实现保存功能,该shelve模块使用pickle.

在发现我无法腌制 pygame 表面后,我遵循建议将字典键作为我的对象属性传递的建议。一旦我花了几个小时修复游戏,系统地检查所有表面并实际启动并运行开始菜单,我收到一条新消息错误,指出 pygame 时钟对象也无法序列化。令我沮丧的是,与表面不同,我无法预先创建我需要的所有时钟,因为我使用了很多特定于给定对象的时钟(攻击计时器、动画计时器、AI 计时器等)。也就是说,我没有为我的所有精灵设置一个攻击计时器,而是为每个精灵设置一个,这样我就有了更大的灵活性。此外,时钟的数量将取决于我创建的对象的数量,并且在某种程度上这个数字是随机的。我真的不能

因此,回顾一下我实际遇到的问题:

1)我怎样才能shelvepygame计时器?

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

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

我知道我问了很多,但我花了这么多时间对这些表面进行分类只是为了遇到与计时器相同的问题并想知道接下来会发生什么……尽管我想这都是学习的一部分;)

4

1 回答 1

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)

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

于 2016-07-11T00:26:47.413 回答