保存多个精灵的游戏进度

时间:2016-06-23 15:47:44

标签: python save pygame pickle

我正在使用Pygame进行游戏,其中包括玩家类和敌人类。每个类都有多个变量。我试图通过使用Python的内置pickle模块来弄清楚如何保存这些精灵的数据。我想做类似的事情:

data_file = open_file("save.dat","wb")
for i in enemyList:
    pickle.dump(i.health)
    pickle.dump(i.rect.x)
    pickle.dump(i.rect.y)
    pickle.dump(i.image)
每个变量的

等等。如何保存数据并以之前的状态检索数据?

1 个答案:

答案 0 :(得分:1)

<强>答案

由于pickle是对象序列化,你应该只能转储整个对象。 b中的wb用于二进制。这是因为您不必知道对象如何以二进制形式表示,您可以像这样转储它:

data_file = open_file("save.dat","wb")
for i in enemyList:
  pickle.dump(i, data_file)

然后当你重新加载它时,你将拥有整个对象。

打开它:

with open('save.dat', 'rb') as fp:
  i = pickle.load(fp)

我之前没有使用过pickle,但是因为它只是二进制文件所以你应该能够转移你的敌人列表,如果它是一个对象:

data_file = open_file("save.dat","wb")
pickle.dump(enemyList, data_file)

with open('save.dat', 'rb') as fp:
  enemyList = pickle.load(fp)

排除/加入其他州

Pickle在读取和编写pickle序列化数据之前使用__getstate____setstate__方法来改变状态。如果要省略非序列化数据,则必须覆盖这些方法。以下是帮助您完成此操作的文档:

Pickle State

<强>考虑

序列化(以及python pickle)被视为创建自己的文件格式的替代方法。通常情况下,根据数据类型,我发现更容易。如果您无法控制对象层次结构,有时您不想创建自己的继承对象来尝试控制所有数据。有时,编写自己的文件格式会更容易。