1

ゲームのユーザー設定 (コントロール、グラフィックスなど) をファイルに保存して読み込む方法が必要です。私はこれをクロスプラットフォームで行いたいと思っています。また、ライブラリを使用する必要がある場合は、十分に単純な構文を使用したいと考えています。構成ファイルを保存およびロードするにはどうすればよいですか? また、どの形式を使用すればよいですか? XML と INI は人気があるようですが、私が見つけたすべてのパーサーは構文がわかりにくく、独自のパーサーをどこから始めればよいかわかりません。

ところで、構成ファイルはおそらくそれほど複雑にはならないので、軽量で高速なものが最適です。

余談ですが、アイテムなどを定義するためにスクリプトを使用することを考えていましたが、xml のようなマークアップ言語やスクリプト言語 (私が使用している AngelScript など) のほうがよいでしょうか?

4

7 に答える 7

2

Googleプロトコルバッファ

シリアル化メッセージングの間には、長年の混乱があると思います。

シリアル化

一般的に短命であり、オブジェクトの周りを通過する必要があります。

記事で述べられているように、COMそしてCORBAその使用法のよく知られた例です。

メッセージング

異なるエンティティ間の通信についてです。


問題は、多くの人がメッセージングの問題を目にしたとき、単純に次のように考えていることです。

しかし、これは適応されていません。

オブジェクトのシリアル化とは、オブジェクトを「エンコード」して復元できることを意味します...突然方法を変更し、1つのオブジェクトが2になった場合はどうなりますか?下位互換性にどのように対処しますか?

ここでの問題は、シリアル化が安定したモデルで非常にうまく機能する場合、モデルの変更が苦痛になる可能性があることです。

一方、メッセージングは​​、現在のモデルからのメッセージのエンコードとデコードを非相関化します。したがって、モデルへの変更は、メッセージのエンコードとデコードで処理するだけでよく、モデルは下位互換性の負担から解放されます。


ここで、構成ファイルについては、下位互換性が必要になる可能性があります。次に、メッセージングソリューションを選択することが最善の利益になります。

Google Protocol Buffersそれは健全で証明されているので、私は提案します。

  1. 前方互換性と後方互換性は簡単に処理できます
  2. 人間が読める形式またはバイナリ形式のいずれかを生成できます
  3. 同じメッセージをさまざまな言語でエンコード/デコードできます

1.が重要である理由を提示する必要はありません。2.ファイルを手動で編集して微調整できることを意味します。3。GUIまたはチェックスクリプトを簡単にコーディングできることを意味します。

于 2009-10-30T21:50:33.037 に答える
2

軽量で構成言語としてうまく機能する Lua を使用しています。年月が経つにつれ、コア エンジン以外のすべてが Lua でコーディングされるまで、Lua スクリプトにますます移行し始めました。最新のイテレーションでは、ゲームのダイナミクスもコールバックを使用して Lua でコーディングされており、パフォーマンスへの影響はほとんどありません。これを行うべきだと言っているわけではありませんが、Lua は成長を可能にし、c/c++ での実装は非常に簡単です。

于 2009-10-30T21:23:32.390 に答える
2

構成を表す C++ クラスを作成し、それをシリアル化するにはどうすればよいでしょうか? たとえば、ブーストのシリアライゼーションを見てください。

http://www.boost.org/doc/libs/1_40_0/libs/serialization/doc/index.html

于 2009-10-30T21:03:14.397 に答える
1

ゲームのユーザー構成(コントロール、グラフィックスなど)をファイルに保存してロードする方法が必要です。

ゲームは通常、誤用される可能性があるため、構成情報の保存に独自の形式を使用します(構成ファイルをハッキングして、使用できる予備の寿命や使用できる弾薬の数を増やすことを考えてください)。このような機密情報は、多くの場合、バイナリで記述され、適切な方法で暗号化されています。ゲームプレイを損なう可能性のある保存する必要のある情報がない場合は、テキストベース/マークアップベース/人間が読める形式で進めるのはまったく問題ありません。バイナリ形式には、プラットフォームなどに関する独自の問題があります(この点に関する投稿のSOを検索してください)。

スクリプトを使用してアイテムなどを定義することを考えていましたが、xmlのようなマークアップ言語の方が優れているのでしょうか、それともスクリプト言語(私が使用しているangelscriptのような)の方が優れているのでしょうか。

前のセクションでの私の発言を考慮に入れると、XMLは間違いなく良い選択です。人間が読める形式であり、多数のパーサーが自由に利用できます(また、簡単に作成できます)。スクリプトはまったく別の獣です。本当にスクリプトと制御構造と関数が必要ですか?これも設計上の決定なので、決定するのはあなた次第です。

正しい答えはありません。まず、テキスト/XML形式は私には問題ないように見えます。しかし、時間とゲームの複雑さが増すにつれて、DSLとバイナリ形式に移行する必要があるかもしれません。

于 2009-10-30T20:47:21.170 に答える
1

私のネットワーク ライブラリの一部であるMessage クラスに興味があるかもしれません。あらゆる種類のデータを便利に保存でき、含める階層/構造はいくらでもあります。データは、プラットフォームに依存しないバイナリ形式にシリアル化できます。C、C++、Java、Python、C# 用の API があり、使いやすいです。

かなり複雑なプロジェクト ファイルを保存するために何年も使用してきましたが、非常にうまく機能しています。

于 2009-10-30T21:09:43.917 に答える
0

IniParser - 使いやすい, 標準の ini 構文, C ですが, クラスにラップするのは簡単です.

于 2009-10-30T21:29:42.113 に答える
0

多くのゲームでは、これらの設定をバイナリ ファイルに保存しています。XML よりも高速ですが、最近では問題ではないと思います。XML ファイルでどのような問題が発生しているかを説明してください。

于 2009-10-30T20:41:50.930 に答える