Java で 2D プラットフォーマーを作成しましたが、ゲームをどのように保存するのか疑問に思っていました。XMLEncoder または ObjectOutputStream を使用してゲーム全体をシリアル化するだけを見ましたが、それらはスレッドを正しく保存しませんでした。ゲームを再起動すると、スレッドが実行されていませんでした。それで、ゲームのロード後にすべてのスレッドで start を呼び出してみましたが、スレッドが無効な状態にあるという大きな問題が発生し、ゲームが故障し始めました。ゲーム全体を保存ファイルに書き込むための最良の方法は何ですか?
2 に答える
ゲームの保存は、終了/保存時にすべてのオブジェクトをメモリ内の状態とまったく同じように保存し、後でそれらを正確な状態に戻すほど簡単なことはめったにありません。
ディスクに書き込むゲームの状態を表すデータ構造を作成する必要がある/作成したい可能性が高くなります。マルチスレッドが主な関心事である可能性は低いです。ゲームの状態をロードするときに、これらのスレッドを新たに開始する必要があります。
多くのゲームがメニュー経由で保存/ロードされることを考慮してください。ゲームがスプラッシュ スクリーン、または少なくともメイン メニューで開始する場合、起動時にオブジェクトを正確な状態からロードすることは望まないでしょう。ゲームの状態に関する重要なすべてを再構築するために必要な最小限の重要な要素を見つけて、それをディスクに保存します。ゲームの状態のほとんどは、非常に少量のデータから暗黙的に再作成できます。
悲しいことに、ゲームを保存/ロードする正確な方法は、使用している正確なデータ構造とゲームの全体的な性質に大きく依存するため、Q/A Web サイトで簡単に回答することはできません.
スレッドではなく、ビジネス ドメイン データのみをシリアル化する必要があります。データをリロードするときは、スレッドを再度作成する必要があります。ドメインクラスがシリアライズ可能であると仮定すると、ObjectOutputStream は問題ありません。