2016-07-10 8 views
0

pickleを使用するshelveモジュールを使用して作成した小さなRPGに保存機能を実装したいと考えています。ピグリングpygame時計

私はpygameの表面をピケッとすることができなかったことを知った後、私は代わりに辞書のキーをオブジェクトの属性として渡すことを提案しました。 いったんゲームを修正する時間を費やして、体系的にすべてのサーフェスをチェックし、実際にスタートメニューを起動して実行しました。pygameクロックオブジェクトがシリアル化できないという新しいメッセージエラーが発生しました。私は、多くの(タイマー、アニメーションタイマー、AIタイマーなどを攻撃する)多くのものを特定のオブジェクトに特化して使用しているので、私が必要とするすべてのクロックを事前に作成することはできません。私はすべてのスプライトに1つの攻撃タイマーを持っている代わりに、私はそれぞれのスプライトを1つ持っているので、より柔軟になります。さらに、クロックの数は、作成するオブジェクトの数によって異なりますが、この数はランダムです。私は本当にオブジェクト指向の構造を維持しながら私は周りの方法を考えることはできません。私は1000sのタイマーを生成し、オブジェクトにリンクを避ける。だから私は実際に持っている疑問におさらいする

1)どのように私shelve pygameのタイマーができますか?

2)どのような方法をお勧めしますか?

3)この保存機能の実装に時間を費やす前に、他のパイゲームオブジェクトがシリアライズ可能でないか、この情報をどこで見つけることができますか?

私はたくさん聞いていますが、タイマーで同じ問題を抱えて、次に何が起きるのだろうと、そんなに多くの時間を費やしてしまったのは非常に不満です。 )

答えて

2

間違った方法で問題を解決しようとしている可能性があります。私は、Pythonオブジェクトを直接シリアル化しようとするのではなく、実際に必要なデータだけを辞書形式で保存することに固執するべきだと言います。

実際に複数のパイゲームクロックを使用する必要があるケースは考えられません。あなたの正確な状況はわかりませんが、このような構造をお勧めします。

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) 

この場合も、あなたの状況はわかりませんが、この種の構造から有用なものを集めることができれば幸いです。このようなアドバイスは、コメントにはおそらくより適していますが、そうするには十分な評判はありません。がんばろう!