です私のゲームの参照データを格納するJSONファイルです。良いニュースはlibGDX comes with a JSON parserです。このコードは、次のようにコードのいくつかの行で使用できます。
public class Item {
private String name;
private String description;
private String image;
private float baseValue;
private int baseQuantity;
private float rarityIndex;
private Array<String> tags = new Array<>();
public Item() { }
// More Constructors/Getters/Setters/Helper Methods, etc.
}
は、その後、あなたがファイルを読むためJson
オブジェクトを作成する必要があります(またはファイルへの書き込み):まず、あなたがシリアライズ可能なクラスを定義したい。これは、実際にある
Json json = new Json();
types = json.fromJson(Array.class, Item.class, Gdx.files.internal(FILE_NAME));
私のゲームの作業コード。いくつかのことは指摘します
- 種類はlibGDXの
Array
クラスを使用したタイプArray<Item>
です。つまり、libGDXに適切な配列ではなくArrayオブジェクトとして解釈するように指示していますが、libGDXのデータ構造が本当に好きなので、これは私にとって問題ではありません。
- GWTを使用する場合、特に マップを使用している場合、
com.badlogic.gdx.utils
のlibGDX実装を使用する場合は、すべてのJavaデータ構造がサポートされているわけではありません。これは、GWTの本質は反射に一定の制限を課しているからです。
- 我々は
Json#fromJson()
を呼び出すときに我々はそれがArray<Item>
オブジェクトを返すために知っているようにArray.class
とItem.class
を渡す必要があることに注意してください。
ここでJSONをどのように構成しますか?これを理解する最も簡単な方法は、いくつかのオブジェクトを生成し、ファイルまたは標準出力に書き込む小さなテストプログラムを作成することです:
System.out.println(json.prettyPrint(types));
これは、単純な構造のために働く(そしておそらくあなたが必要とするすべてであるだろう。が、それはJSONを見て、それが構造化されます方法を理解するために役に立つかもしれません、以前の私の例に戻って、JSONファイルは、次のようになります。
[
{
"class": "tech.otter.merchant.data.Item",
"name": "Bindookian Spices",
"description": "Sweet, yet spicy.",
"image": "goods0",
"baseValue": 150,
"baseQuantity": 1000,
"rarityIndex": 0.25,
"tags": [
"category-food",
"category-luxury"
]
},
{
"class": "tech.otter.merchant.data.Item",
"name": "Italiluminum Rods",
"description": "Shiny.",
"image": "goods1",
"baseValue": 400,
"baseQuantity": 1000,
"rarityIndex": 0.25,
"tags": [
"category-valuable",
"category-material"
]
}
// More items in the real file
]
あなたは、これは非常に簡単マッピングであることがわかりますJSONから私たちのクラスまでいくつかの注意点:
- ファイルが角括弧[]で始まるところに注意してください。これは、コード内のArrayクラスに変換していても、データがJSON配列として保存されていることを示しています。
- これはlibGDXの出力を基にしているため、各Item構造の内部には「class」タグがあります。私はこれが厳密に必要であるとは考えていませんが、このようなネストされたデータ構造を持っているときに傷つくことはありません。
- 「タグ」が配列としてどのように格納され、libGDXがArrayオブジェクトであるかを知る必要はありません。要約すると
、libGDXライブラリは、(あなたは特別なシリアル化のニーズを持っている場合further customizedすることができます)、独自のJSONパーサが付属していますが、トレードオフは、あなたが特にとき(特定のケースでlibGDXデータ構造を使用しなければならないことですGWTを使用して)。
本当に助けてくれてありがとう、ありがとう! 1つの質問、あなたは特定のアイテムを取得したいと思う、あなたはちょうどjsonをロードし、あなたが名前でほしいアイテムを呼ぶでしょうか? – johnnyboy5566
ファイルが非常に大きい場合を除き、最も簡単な方法は、配列を読み込んだ後、その配列を検索して、必要な項目を探し出すことです。私の使用例では、すべてをロードしてメモリに格納したかったのです。パフォーマンスが問題になる場合は、「イベントベースの解析」(libGDX wikiページで参照)を使用して何らかのクエリを作成することができると思います。 – John