0

shelve現在、を使用するモジュールを使用して作成した小さな RPG に保存機能を実装することを検討していますpickle

pygame サーフェスをピクルできないことがわかった後、オブジェクト属性として代わりに辞書キーを渡すことを提案するアドバイスに従いました。ゲームの修正に何時間も費やし、すべてのサーフェスを体系的にチェックし、実際にスタート メニューを起動して実行すると、pygame クロック オブジェクトもシリアル化できないという新しいメッセージ エラーが表示されました。残念なことに、サーフェスとは異なり、必要なすべてのクロック (攻撃タイマー、アニメーション タイマー、AI タイマーなど) をすべて特定のオブジェクトに固有に使用するため、必要なすべてのクロックを事前に作成することはできません。つまり、すべてのスプライトに 1 つのアタック タイマーを設定する代わりに、それぞれに 1 つのアタック タイマーを設定して、柔軟性を高めています。さらに、クロックの数は作成するオブジェクトの数に依存し、この数はある程度ランダムです。私は本当にできる」

だから、私が実際に持っている質問を要約すると:

shelve1)タイマーを pygameするにはどうすればよいですか?

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 に答える