解析XML文件,Android NDK, SDL2

Parsing XML files, Android NDK, SDL2

本文关键字:NDK SDL2 Android 解析 文件 XML      更新时间:2023-10-16

加油。

我目前正在制作一款游戏——它是c++/SDL2/OpenGL的组合,在PC上运行得相当好。长期目标是使其便携,尽管考虑到我缺乏将其推向所有平台的大部分设备,第一个"移植"可能是android手机和平板电脑。

SDL2有一个官方的(或"官方认可的")移植到Android上,在与Java和Eclipse以及一个几乎坏掉的OpenGL ES 2.0渲染器讨价还价了几周之后,我已经在我可爱的Nexus 7平板电脑上运行了这些东西。它不是很快,也不是很漂亮,但它是一个可以建立的基础。

然而,我的游戏,就像我想象的许多类似的游戏一样,很大程度上依赖于从XML文件中读取(和写入)数据,无论是保存,选项,关卡等等。但是Android NDK在编译时压缩除了少数文件格式之外的所有文件格式- SDL2有从Android创建的/assets/文件夹(我所有的东西都存储在那里)中抓取图像和音频的功能,但是我使用TinyXML2进行XML处理,这无法处理。

似乎有一小部分可能的解决方案(这是一个出现相当多的问题-我很清楚我右边的"类似问题"框中充满了类似的问题),但每个人似乎都有相当大的警告或对如何编写代码做出相当大的假设。最后的结果通常是指向不适合tinyxml2的古怪变量类型的指针,或者我在完成一半的时候被卡住了,因为原来拼图的一部分不在那里。这真是太令人沮丧了。

方法a)似乎涉及在运行时解压缩apk并通过暴力破解访问资产。这听起来是一种非常糟糕的操作方式,并且在某些情况下似乎假设apk被放置在特定位置。对我来说听起来很可怕,而且很难实现?

方法b)使Java端有效地将指向Android资产管理器的指针传递给c++端。这似乎更好,但我看到的java到c++ Android通信的例子似乎是围绕非常小的"Hello World"风格的项目,你只是传递一个字符串或数字。我还读到这篇文章涉及编译Java头文件,并做了一些新奇的事情——这个过程可能会失败,因为Android资产管理器不是标准数据类型或其他什么。

c) SDL_RWops是为Android准备的,可能是从文件中读取数据的一种更好的方式。但它并没有解决后续的砖墙,因为我试图将这些东西转换为tinyxml2将理解的东西。

方法d)似乎建议你可以改变资产的扩展,使它们不被压缩。所以我所有的XML文件都变成了非官方的png文件。这听起来也很糟糕,尤其是因为我有40多个需要管理的XML文件。据说有一种方法可以调整文件被压缩或不被压缩,但有些人似乎认为这是全部或没有,我不确定它是如何做到的。

要明白,当你在这上面花了几个小时,很容易让自己被误导。虽然我承认自己找出这些东西的好处,但网上的线索往往是不完整的,过时的,或者是完全错误的。

所以是的,一个简单的指南将是可爱的。我已经浪费了很多天的时间来探索各种选择,我相信有一个明确的答案对世界是有益的。

如前所述,这在Windows PC上运行良好-读写不是问题,所以我知道这不是像可疑文件这样愚蠢的东西。对于Android移植,我使用的是Eclipse,如前所述,我测试的平板电脑是Nexus 7。我有c++和Java的实用知识,但是这些繁琐的细节使我心烦意乱。

Thanks in advance

好吧,我已经休息了一会儿,回到了这个难题,并且考虑到在线教程或文档或其他方面的情况并没有真正改变,我选择了愚蠢的选项(选项d) -我写了一个批处理文件来将我的XML文件转换成jpeg文件,现在程序查找要读取和写入的jpeg文件。多么可怕的。

从好的方面来看,tinyxml2似乎正在加载这些假的jpeg,但是当它被赋予命令查看内部特定元素时,事情就崩溃了,这使我认为它可能没有正确加载东西(但至少它不再在文件加载时崩溃)。

调试是痛苦的,整个策略感觉是肮脏和错误的。没有什么比纠结于一个几乎所有使用c++的Android游戏开发者都已经以某种形式回答过的问题更让人沮丧的了。读写文件——为什么这是一个挑战?