【发布时间】:2017-06-27 15:56:10
【问题描述】:
我正在考虑开发一个 RPG 引擎,主要是为了开发经验,而不是真正针对任何商业。然而,在存储类基本统计数据时,我遇到了一些困难。多年来,我在 Game Maker 中工作得更广泛,所以我的经验更适合于此。我目前正在使用 Monogame 使用 C# 并围绕它展开工作。
我相信存储我需要的信息的好方法将需要外部文件,来自我所阅读的内容。我习惯于调用和使用来自 GM 的 INI 文件,但我没有那么多能力将我的头脑围绕在 XML 上。我有一个我希望实现的设置的公共粘贴箱,并且很好奇你们的想法,如果这样的设置是可行的,或者我是否正试图以某种糟糕的方式做到这一点。
我正在设计的 XML 文档(完全按照理论)的结构如下:
<?xml version="1.0" encoding="utf-8" ?>
<BaseClass>
<Class Class="Barbarian">
<Level Level="1">
<baseAtk>1</baseAtk>
<baseFort>2</baseFort>
<baseRef>0</baseRef>
<baseWill>0</baseWill>
<classSkillCt>2</classSkillCt>
<classSkill0>ID_CS_BARB_FASTMOVE</classSkill0>
<classSkill1>ID_CS_BARB_RAGE</classSkill1>
</Level>
<Level Level="2">
<baseAtk>2</baseAtk>
<baseFort>3</baseFort>
<baseRef>0</baseRef>
<baseWill>0</baseWill>
<classSkillCt>2</classSkillCt>
<classSkill0>ID_CS_BARB_UNCDODGE</classSkill0>
<classSkill1>ID_CS_BARB_RAGEPWR1</classSkill1>
</Level>
<Level Level="3">
<baseAtk>3</baseAtk>
<baseFort>3</baseFort>
<baseRef>1</baseRef>
<baseWill>1</baseWill>
<classSkillCt>1</classSkillCt>
<classSkill0>ID_CS_BARB_TRAPSENSE1</classSkill0>
</Level>
<Level Level="4">
<baseAtk>4</baseAtk>
<baseFort>4</baseFort>
<baseRef>1</baseRef>
<baseWill>1</baseWill>
<classSkillCt>1</classSkillCt>
<classSkill0>ID_CS_BARB_RAGEPWR2</classSkill0>
</Level>
<Level Level="5">
<baseAtk>5</baseAtk>
<baseFort>4</baseFort>
<baseRef>1</baseRef>
<baseWill>1</baseWill>
<classSkillCt>1</classSkillCt>
<classSkill0>ID_CS_BARB_IMPUNCDODGE</classSkill0>
</Level>
</Class>
<Class Class="Bard">
<Level Level="1">
<baseAtk>2</baseAtk>
<baseFort>1</baseFort>
<baseRef>3</baseRef>
<baseWill>3</baseWill>
<spellDay0>4</spellDay0>
<spellDay1>1</spellDay1>
<spellDay2>0</spellDay2>
<spellDay3>0</spellDay3>
<spellDay4>0</spellDay4>
<spellDay5>0</spellDay5>
<spellDay6>0</spellDay6>
<spellDay7>0</spellDay7>
<spellDay8>0</spellDay8>
<spellDay9>0</spellDay9>
<spellKnw0>6</spellKnw0>
<spellKnw1>4</spellKnw1>
<spellKnw2>0</spellKnw2>
<spellKnw3>0</spellKnw3>
<spellKnw4>0</spellKnw4>
<spellKnw5>0</spellKnw5>
<spellKnw6>0</spellKnw6>
<spellKnw7>0</spellKnw7>
<spellKnw8>0</spellKnw8>
<spellKnw9>0</spellKnw9>
<classSkillCt>6</classSkillCt>
<classSkill0>ID_CL_SKILL_BRD_BRDKNOWLEDGE</classSkill0>
<classSkill1>ID_CL_SKILL_BRD_BRDPERFORM</classSkill1>
<classSkill2>ID_CL_SKILL_BRD_COUNTERSONG</classSkill2>
<classSkill3>ID_CL_SKILL_BRD_DISTRACTION</classSkill3>
<classSkill4>ID_CL_SKILL_BRD_FASCINATE</classSkill4>
<classSkill5>ID_CL_SKILL_BRD_INSPCOURAGE1</classSkill5>
</Level>
</Class>
</BaseClass>
如果这不是 XML 文档的工作方式,请告诉我,这样我就不会在这个问题上搞砸了!我不是在寻找任何人为我编写代码,只是为了获得关于实现我正在寻找的最佳方式的公开建议。我希望能够以某种方式获得我要求的任何级别的任何班级的基本统计数据。因此,如果我要请求 (Barbarian,2) 或类似性质的东西,我会得到 2 级野蛮人的信息 :)
我已尝试在线学习许多教程,但尚未找到真正解释以有意义的方式利用任何外部文件的最佳方法的教程。如果有人对此类信息提出了建议,请告诉我!
【问题讨论】:
-
您拥有的 XML 文档很好,尽管我可能会使用
baseAtk、baseFort等的属性。不过,您的要求并不清楚 - 要求关闭的问题- 现场教程等是题外话,你还没有给我们一个具体的问题来帮助你解决。如果您可以使用 LINQ to XML,我会强烈推荐它作为一个不错的 XML API。除此之外,请让您的问题更具体。 -
我不会使用末尾带有数字的标签名称。我会将数字设为 id 之类的属性,这会使 xml 更易于解析。
-
感谢您抽出宝贵时间回复! @JonSkeet 抱歉,这个问题太开放了。我或多或少对 XML 的工作原理没有深入了解,并且正在尝试学习一种在 Y 级别存储和提取有关 X 类的数据的方法,因此我不必将所有这些信息硬编码到一个类中:) 因为我还没有很好地掌握如何解析 XML 文档中的任何信息,所以我想确保我对它的理解是正确的,所以我知道我不会无处可去。跨度>
-
@jdweng 感谢您的意见!我不会想到这一点,肯定会更好看!