質問

これはC#の質問です。

誰かがXMLの代わりに *.csファイルにデータを保存しようとした場合、私はたださまよっていましたか?

私は本当にXMLが嫌いです。 HTMLのような構造を解析するという全体のアイデアは、データが必要なときに愚かに思えます。

XMLから軽量の代替品(YAMLなど)はありますか?私の場合、私は実際にいくつかのデータを(ゲーム)レベルで保存する必要があります。ここでは、さまざまなオブジェクト、地形タイプなどがあります。フラットファイルにあるので、後で読むことができます。

私は自分のシリアル化できたと思います レベル クラスですが、たとえば、あらゆるテキストエディターでデータファイルを編集したいと思います。

どんな助けも大歓迎です、ありがとう!

PS:.CSファイルに関して、編集者を通じてゲームで新しいレベルを作成(保存)する(そして保存)能力が必要であることを忘れていました。

役に立ちましたか?

解決

XMLを使用したくないので、テキスト編集可能な独自のファイル形式を作成することをお勧めします。

PROPERTIES
name = First Level
number = 1
END

MONSTERS
Barbarian
pos = (3, 6)
health = 2

Dragon
pos = (10, 10)
health = 8
END

あなたが必要とする他のもののためにそのようなことなど。

自分でパーサーを作成するのは本当に簡単です。行ごとにファイルで読み取るだけです。最初の行では、タイトルがプロパティであることがわかりますので、エンドラインで読むまでプロパティを読み取ります。あなたが持っている他のヘッダーについても同じこと。これを変える方法はたくさんありますので、あなたが望むように構文を作ることができます。

他のヒント

私は長年ゲーム業界で働いてきましたが、XMLは最高のツールサポートを持っているため、XMLを使用しています。 YAMLまたはINIファイルは構成に使用されますが、ゲームデータはXMLに保存されます。もちろん、通常、XMLをバイナリコードに変換するツールをゲーム用のゲーム用に持っていますが、開発中およびカスタムゲームツール開発中にXMLが単純に揺れます。

XMLはあなたのニーズに合った適切なハンマーであることがあります。いくつかのフィールドで最高ではないという理由だけで、テクノロジーを偏見にしないでください(Ajax(Transport)vsデータ定義など)

なぜ(XML)?

ファイルにさまざまな種類の情報を保存することを特に考慮して、XMLを使用しない場合はありません。

とはいえ、.CSファイルアプローチについては、ファイル内のデータを探す代わりに、必要なデータを初期化するコードをロードするようにアプリケーションコードを構築することをお勧めします。ファイルにデータを調べる代わりに、初期化クラスをロードするようになったため、明確なパターン(コンパイル +ロード)が得られます。できるだけ簡単に構成を作成するために、できるだけ追加します。

INIファイル?

[section]
key=value

あなたの質問をもう少し読んでそれについて考えた後、XMLはゲーム業界で構造化され、子どもたちをサポートし、テキストエディターが手で編集できるようになります。

XMLファイルを使用するいくつかのゲーム:

World of Warcraft
Crysis
コマンド&征服3

HTMLのような構造を解析するという全体のアイデアは、データが必要なときに愚かに思えます。

XMLまたはYAMLを使用しない場合は、独自のパーサーとバリデーターを書く必要があります。これで、愚かな統治がある土地に入りました。 XMLはすべての出口として迷惑ですが、それを操作するためのツールのエコシステムなしで行うことはさらに悪化します。

私たちは構成ファイルのJSONが好きです - それは驚くほど多用途です。

手で編集するのは簡単で、解析と生成が簡単で(.NETの強力なライブラリ - MSとサードパーティの両方を含む)、非常に強力です - 優れた基本的なデータ型を備えたXMLの種類。

以前に聞いたことがあるなら、Donnoですが、このYamlのことをチェックする必要があります。それは完全にクールです its own homepage そしてすべて。

データが複雑すぎたり階層的でない場合は、次のようなプロパティファイル形式に保存できます。

level.name=My Level
level.mapfile=Map.txt

一方、XMLはシリアル化(iSerializableまたはdatAcontrage)を使用してC#で非常に簡単に操作できます。解析コードを書く必要はありません。フレームワークはすべてを実行します。テキストエディターでXMLを編集することはそれほど悪いことではありません!

XMLで少し妥協することをいとわない場合は、 namevalueCollection 構成アイテムを保持します。その後、組み込みの.NETシリアル化を使用してこれをシリアル化できます。ファイルはXMLになりますが、非常にシンプルで編集しやすい形式であり、手動のタイプの変換/検証を心配する必要はありません。

XMLは、非常に重いとさえ、ファイルにデータを保存するのに最適な選択肢であるとさえ考えています。Linqfor XMLは、そのデータをより簡単に読み書きします。

データが非常に複雑になった場合の別のオプションは、SQLiteのようなものを使用することです。これを使用する前とシングルユーザーアクセスのために、非常に高速で使いやすいです。

テキストエディターで編集できるバイナリ形式が必要なようです。残念ながら(誰もがヘックスエディターに堪能になるまで)、スピードと編集の容易さの間に避けられないトレードオフがあります。

バイナリ形式は基本的に、状態をコードする最小のバイトセットの非常に密な梱包であるため、速くて解析しやすいでしょう。一方、XML形式は簡単に編集できます。考えられる解決策の1つは、両方を作成し、それらの間を変換する簡単なプログラムを作成することです。パワーユーザーは、このプログラムを使用してレベルをXMLに変換し、編集してから変換します。

このシナリオでXMLを使用する場合は、オブジェクトごとに複数のファイルを1つ以上使用することをお勧めします。あなたは複雑な世界を持つことを計画しているように聞こえます。少し切り刻むのは理にかなっています。

.NET構成システムを使用すると、XML解析が行われます。見る 方法:構成セクションを使用してカスタム構成セクションを作成します. 。 ASP.NETセクションにありますが、すべての.NETコードに適用できます。

技術的には、XMLを解析する必要はありません。データモデルを作成してから、XMLからシリアル化して脱皮になります。また、データモデルにTreeViewまたはListViewがデータモデルに表示され、PropertyEditorを使用して選択したオブジェクトのプロパティを編集することにより、データモデル用のVisual Studioでエディターを構築することも非常に簡単です。 OpenFileDialogとSaveFileDialogを使用して、ユーザーがXMLファイルとXMLSerializerを選択して、データモデルをロードおよび保存できるようにします。本当に痛みがありません私はあなたを保証します! :-)

私はゲーム業界で働いており、XMLを使用して、あなたが説明していることを行うために使用しています。
その理由は次のとおりです。
1.それはよく理解されており、標準です
2.ライブラリの面で優れたサポートがあります
3.検証することができます - これはデータエディターを作成するときに不可欠です
4.構造化されています
5.それは人間が読みやすく、したがって簡単にデバッグ可能です

あなたは、あなたがそこにある多くのXMLパーサーのいずれかを使用する必要があることを私に示唆する価値を得るためだけにそれをトロールしなければならないと言うという事実です。それが簡単で働くことを私に信じてください

人々はそれを正当な理由で使用します。はい、それはそれが欠点、すなわち冗長などですが、私はその利点が不利な点をはるかに超えていると信じています!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top