0

私は過去数週間、XNAでゲームを作成してきました。その過程で、問題を完全に理解することなく、問題に遭遇する前に問題を解決しようとしました。

その問題は、「ブループリント」オブジェクトの保存と取得をどのように処理するかでした。私が作成しているコンテンツクリエーターのためにこの機能が必要です(ゲームはコンテンツベースです)。そのため、目的は、コンテンツ(大まかに言えば、ヘルスが100の「ゴブリン」タイプの敵とゴブリンスプライト)を作成し、シリアル化されたオブジェクトに保存してゲームにロードすると、次の場所で使用および複製できるようになります。 -ゲーム。

これで、オブジェクトにTexture2D(スプライト)のようにシリアル化できないものがある場合、それらをシリアル化することはできません。マップとスプライト(アイテム、NPC、キャラクターなど)を持つオブジェクトの両方で、すべてのテクスチャを静的クラスに追加し、オブジェクトのテクスチャへのインデックスのみを格納することで、この問題を解決しました(たとえば、Texture2Dプロパティを含める代わりに、 Goblinには、適切なテクスチャにリンクするインデックスが含まれています。少し単純化しすぎていますが、わかります)。

しかし、その後ウイルスが広がり、私はすべてのオブジェクト参照に対してそれを実行し始めました。たとえば、ゴブリンにはAIオブジェクトへの参照も必要です。そのAIオブジェクトにはメソッドしかないため、明らかにシリアル化できますが、テクスチャと同じ静的クラスに格納し、インデックスを介してリンクしていました。今振り返ると、何を考えていたのかと震えます。

だから私の質問は、テクスチャを除くすべてが、インデックスによる参照ではなく、シリアル化可能なクラスの直接参照によって保存されるべきかということです。それとも、私がやったことをする実行可能な理由はありますか?

シリアル化はトリッキーなビジネスであり、私はそれを使用するための最良の方法とそれを回避するための適切な時期に頭を悩ませようとしています。

4

1 に答える 1

2

あなたが言ったように、シリアル化は参照を追跡することはできません。オブジェクトグラフ全体をシリアル化するか、逆シリアル化時に参照を解決する独自の方法を考え出します。したがって、静的クラスからすべてをぶら下げるのではなく、より良い解決策を見つけたいと思うかもしれませんが、あなたがしたことは正しいことでした。

また、戦略を変更することもできます。オブジェクト自体をすべてのインデックスとともに保存する代わりに、必要な情報のみを保存してから、この情報を読み取り、オブジェクトに適切な値を設定するリゾルバーファクトリを作成できます。

于 2012-12-27T00:21:04.213 に答える