XML を使用して実際に管理した C# でオブジェクトを定義するのは初めてですが、もっと良い方法があるはずです。
私のゲームデータベースのデータはいくつかの XML ファイルで構成されています
<GameData xmlns:NSW="Napivo.StarWars">
<!-- Ships -->
<!-- AITroopAccelerator -->
<Asset Type="ShipDescription">
<Name>AITroopAccelerator</Name>
<Asset Type="SpriteAnimation">
<Name>\Ships\AITroopAccelerator\1.png</Name>
<Name>\Ships\AITroopAccelerator\2.png</Name>
<Name>\Ships\AITroopAccelerator\3.png</Name>
<Name>\Ships\AITroopAccelerator\2.png</Name>
<Speed>150</Speed>
</Asset>
<Asset Type="WeaponGroup" Num ="0">
<Weapon Name ="Missile" Angle ="0" X ="0" Y ="0"> </Weapon>
<Asset Type="WeaponGroup" Num ="1">
<Weapon Name ="NegativeEnergyFlare" Angle ="180" X ="0" Y ="0"> </Weapon>
</Asset>
<Weapon Name ="Lightning" Angle ="0" X ="0" Y ="0"> </Weapon>
</Asset>
<Asset Type="WeaponGroup" Num ="2">
<Weapon Name ="FastLazer" Angle ="-10" X ="0" Y ="0"> </Weapon>
<Weapon Name ="FastLazer" Angle ="+10" X ="0" Y ="0"> </Weapon>
<Weapon Name ="Ion" Angle ="-90" X ="0" Y ="0"> </Weapon>
</Asset>
<Asset Type="Armory">
<Resource Type ="Energy" Ammout ="-1000" Recharge ="0.2"></Resource>
<Resource Type ="Missile" Ammout ="-10" Recharge ="0"></Resource>
</Asset>
<HullStrength>100</HullStrength>
<ShieldStrength>100</ShieldStrength>
<ColorMask>\Ships\AITroopAccelerator\ColorMask.png</ColorMask>
<Scale>1</Scale>
そして、これは、この xml ファイルの先頭または末尾を作成するために記述する必要があるコードです....
private void ReadShipDescription(XmlNode node)
{
ShipDescription sd = new ShipDescription();
XmlNodeList NL = node.ChildNodes;
foreach (XmlNode n in NL)
{
Console.WriteLine("{0} = {1}", n.Name, n.Value);
if (n.Name == "Name")
{
sd.Name = n.InnerText;
}
if (n.Name == "Scale")
{
sd.Scale = float.Parse(n.InnerText);
}
if (n.Name == "HullStrength")
{
sd.HullStrength = float.Parse(n.InnerText);
}
if (n.Name == "ShieldStrength")
{
sd.ShieldStrength = float.Parse(n.InnerText);
}
if (n.Attributes != null)
{
foreach (XmlAttribute a in n.Attributes)
{
if ((n.Name == "Asset") && (a.Name == "Type") && (a.Value == "SpriteAnimation"))
{
sd.HullAnimation = ReadSpriteAnimation(n);
}
if ((n.Name == "Asset") && (a.Name == "Type") && (a.Value == "WeaponGroup"))
{
sd.WeaponGroups.Add(ReadWeaponGroup(n));
}
if ((n.Name == "Asset") && (a.Name == "Type") && (a.Value == "Armory"))
{
XmlNode childnode = n.FirstChild;
while (childnode != null)
{
ResourceDescription rd = ReadResource(childnode);
if (rd.Ammount < 0)
{
rd.Ammount = float.PositiveInfinity;
}
sd.Armory.Add(rd);
childnode = childnode.NextSibling;
}
}
Console.WriteLine("{0} = {1}", a.Name, a.Value);
}
}
if (n.Name == "ColorMask")
{
sd.ColorMask = n.InnerText;
}
}
ShipDescriptions.Add(sd.Name, sd);
}
それは私には正しくないようです。
オブジェクトを XML から直接クラスまたは構造体に読み込む方法を学べる場所を教えてもらえますか?
これに対してあまり多くの反対票が入らないことを願っています。
ありがとう。