保存多个精灵的游戏进度

2024-04-19 01:54:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Pygame中开发一个游戏,包括一个玩家类和一个敌人类。每个类中都有多个变量。我试图找出如何使用Python的内置pickle模块保存这些sprite的数据。我想过做类似的事情:

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)

依此类推。如何保存数据并以与以前相同的状态检索数据?你知道吗


Tags: 模块数据rect游戏data玩家open事情
1条回答
网友
1楼 · 发布于 2024-04-19 01:54:09

回答

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

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,但由于它都是二进制的,所以如果它是一个对象,您应该可以转储您的enemyList:

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

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

排除/包括附加状态

Pickle使用__getstate____setstate__方法在读写Pickle序列化数据之前改变状态。如果希望省略非序列化数据,则必须重写这些方法。以下是帮助您执行此操作的文档:

Pickle State

考虑

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

相关问题 更多 >