0

我正在尝试在我最喜欢的游戏之一中学习关卡格式,这几乎完全没有记录。基本上,唯一描述关卡格式的文档就是简单地说诸如First 12 bytes: header
4 following bytes: number of materials
x next bytes: array of materials, 之
类的东西。

我对十六进制非常缺乏经验,也不完全理解他们在说什么。但是,有一个关卡编辑器,源代码可在 google 代码上免费获得。我正在考虑将其添加到我的视觉工作室并尝试通过阅读关卡编辑器如何打开文件来学习关卡格式。

然而,另一个问题,我不懂c++(我知道python)。这意味着我可能无法找到代码的哪一部分读取字节等等。

我正在寻找的是能够让我在执行过程中遵循代码流的东西。本质上类似于在每一行上设置断点,并让它告诉我在读取文件内容时正在执行的代码的特定部分。然而,显然在每一行设置断点是非常混乱和缓慢的。我正在寻找一些东西,当我在编辑器中打开文件时,它会简单地显示正在运行的代码。

有谁知道我能做什么?谢谢。

4

2 回答 2

3

您正在寻找一种从一个语句到下一个语句的功能;我认识的每个调试器都有这样的功能。您首先在感兴趣区域的开头设置一个断点,然后从那里开始“单步执行”您的代码。

例如,在 Visual C++ 2010 中,F10 键执行一步;您还可以使用 F11 “进入”下一条语句(例如方法调用)。

在您的情况下,将断点设置为开始读取关卡文件的位置,然后从那里继续。找到读取文件的位置也可能是一个难题——取决于代码的清晰程度;但如果它的代码写得很好,应该有一个名称中带有“read”或“load”或类似名称的方法——你会明白的!

不过,您可能必须至少了解一些基本的 C++ 语法才能了解正在发生的事情。

我还建议阅读 Debugging HowTo(例如这个)。

于 2012-09-07T09:25:03.587 回答
1

您发现如此晦涩的文档只是级别格式规范,在大多数情况下,规范就是您所需要的。您还需要一些额外的文件阅读经验。

阅读文件时,您必须对几件事保持警惕。

1) 逐字节(8 位)读取时,顺序不变。

2) 一次读取 32 位时,字节顺序可以根据机器的字节顺序而改变。

(例如,当字节序改变时,0x12345678 变为 0x78563412)

有一个非常古老的教程可以帮助您加载 3D 模型,帮助我开始处理文件:

http://www.spacesimulator.net/wiki/index.php?title=Tutorials:3ds_Loader

这很有用,因为您有部分规范(如原始文档中的),它显示了如何从规范开始创建加载器。这就是你所需要的。那是 C,但在这种情况下与 C++ 没有太大区别。

如果你需要一些其他简单的文件格式规范和相关的文件加载器来让你更清楚,你还可以查看 libktx 和 ktx 规范:

http://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/

如果我没记错的话,还有一个非官方的 C++ KTX 加载器,你可以看看你是否打算编写 C++ oop 代码而不是 C。

于 2012-09-07T09:43:52.477 回答