2016-06-23 10 views
0

私は、プレイヤークラスと敵クラスを含むゲームを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

回答

ピクルスは、オブジェクトの直列化であるので、あなたは自分のオブジェクト全体をダンプすることができるはずです。 wbbはバイナリです。あなたは全体のオブジェクトを持つことになり、それをバックロードするとき次に

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) 

を私が前に使用漬物をやりなさい、それはすべてのバイナリがあるので、あなたはそれであれば、オブジェクトあなたの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 State

検討

シリアライズ(およびそのためのPythonのピクルス)は、独自のファイル形式を作成する代わりとして見られています。多くの場合、データ型によっては簡単になることがあります。オブジェクト階層を管理していない場合は、継承したオブジェクトを作成してすべてのデータを制御することはできません。場合によっては、独自のファイル形式を作成するほうが簡単です。

+0

私の敵リストにはその変数の1つとして格納されている画像があるため、「TypeError:Surfaceオブジェクトをpickleできません。私はこれをどのように回避できるかわかりません。 – Bagel

+0

シリアル化できないデータで問題を解決する方法を追加しました。 –

関連する問題