【发布时间】:2012-10-19 21:02:52
【问题描述】:
我正在 XNA 中创建一个基于图块的游戏,并将从 xml 文件加载关卡信息。我在加载 xml 数据方面没有问题,但我想就我正在考虑使用的读取 xml 文件的方法提供反馈。
代码具有这样的类层次结构:
一个Level类包含:
- TileLayers 的集合
- Tilesets 的集合
TileLayer 类包含
- 瓷砖集合
一个 Tileset 类包含:
- TilsetTiles 的集合
一个 TilesetTile 类包含:
- 一个 TileId
- TileProperties 的集合
- 一个 TileRectangle
上述每个类都需要一些来自 xml 级别文件的信息。
当我加载一个关卡时,我想简单地调用 Level.Load();
我的意图是每个类都有一个 Load() 方法,它将:
1. 从 xml 文件加载所需的任何特定信息。
2. 对其子级调用 Load()。
我看到的问题是用于处理 xml 的代码将分散在不同的文件中,这使得更改难以实施(例如,如果我决定加密 xml 文件),无疑会破坏 SOLID 原则的几个方面.
我有这样的想法,我可以创建一个 xmlLevelReader 类,其唯一目的是读取 xml 级别文件。 然后,此类可以公开可以从上述每个类中的 Load() 方法调用的方法。
例如,TileLayer 类的 Load() 方法可以调用 xmlLevelReader.GetTiles(),这将返回一个 IEnumerable<Tile>
您认为这种方法可行吗?
你能预见到任何困难吗?
这种方法是否过于简单/复杂?
欢迎任何建设性的批评!
谢谢
【问题讨论】:
-
我真诚地建议考虑使用Tiled Map Editor 并使用TiledLib 导入数据。
-
如果您想使用自己的模型,为什么不使用本机 .NET 序列化机制呢?
-
@Justin 我正在使用 Tiled Map Editor,但从不知道 TiledLib 的存在,所以谢谢!你自己用过 TiledLib 吗?如果是这样,也许您可以发布一个答案,给出一些关于使用它和使用关卡文件中的信息“膨胀”类的指示?此外,内容管道上的任何指针(或指向引用的链接)以及它应该/不应该如何与 TiledLib 一起使用都会有很大的帮助。谢谢
-
@millimoose 我对 .Net 中的序列化还不是很熟悉,我怀疑贾斯汀的回应意味着我这次不需要使用它,但我会记住它以用于其他用途。也许我可以用它来保存游戏进度。谢谢。