シンプルなトップダウン タイル ベースの 2D ゲームの構築に取り組んでおり、Tiled Map Editor (.tmx ファイル) の出力を解析しようとしています。なじみのない方のために説明すると、TMX ファイルは、画像から再利用されたタイルのレイヤーを使用してゲーム マップを記述する XML ファイルです。以前は単純なテキストの解析以外に作業する必要がなかったので、かなり単純な XML ファイルの場合、これを行うには LINQ を使用するのが最も適切な方法であるかどうか疑問に思っています。
要約された .tmx ファイルを次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<map width="100" height="100" tilewidth="16" tileheight="16">
<tileset>
<!-- This stuff in here is mostly metadata that the map editor uses -->
</tileset>
<layer name="Background" width="100" height="100">
<data>
<tile gid="1" />
<tile gid="2" />
<tile gid="3" />
<tile gid="1" />
<tile gid="1" />
<tile gid="1" />
<!-- etc... -->
</data>
</layer>
<layer name="Foreground" width="100" height="100">
<data>
<!-- gid="0" means don't load a tile there. It should be an empty cell for that layer (and the layers beneath this are visible) -->
<tile gid="0" />
<tile gid="4" />
<!-- etc. -->
</data>
</layer>
<!-- More layers.... -->
</map>
ご覧のとおり、かなり単純です (各レイヤーの各タイル (100x100) には「タイル」要素があることに注意してください)。LINQ の目的は、ファイル全体を実際には必要としない非常に大きくてほとんどデータベースのような xml ファイルから、非常に具体的なデータを取得することだと私には思えます。ここで行うことのほとんどは、アプリケーション内のマップを表す配列に各「タイル」要素の gid を挿入することです。
レイヤーを処理するための私のコードは次のとおりです。
public void AddLayer(XElement layerElement) {
TileMapLayer layer = new TileMapLayer(Convert.ToInt32(layerElement.Attribute("width")), Convert.ToInt32(layerElement.Attribute("height")));
layer.Name = (string)layerElement.Attribute("name");
layer.Opacity = Convert.ToDouble(layerElement.Attribute("opacity"));
layer.Visible = Convert.ToInt32(layerElement.Attribute("visible")) == 1;
if (layerElement.HasElements)
{
XElement data = layerElement.Element("data");
foreach (XElement tile in data.Elements())
{
layer.NextTile(Convert.ToInt32(tile.Attribute("gid")));
}
}
this.layers.Add(layer);
}
私の質問をより簡潔にするために:私が行っていて、すべてのデータを気にかけているとき(つまり、各ノードのすべての子要素のデータを順番に繰り返して取得している場合)、LINQ to XML を使用すると、利点?同様に、LINQ to XML ライブラリのパフォーマンスは向上していますか?、LINQ に慣れていないために、自分がやりたいことを効率的に行う方法を見つけることができませんか?など。それとも、本当に別の XML ユーティリティを使用する必要があるのでしょうか?