【问题标题】:Android: How to make game asset files readable from c++ code using ndkAndroid:如何使用 ndk 从 C++ 代码中读取游戏资产文件
【发布时间】:2011-01-17 17:07:19
【问题描述】:

我正在创建一个使用 irrlicht c++ 3D 图形引擎端口到 android 平台的游戏。图形引擎是用 C++ 编写的。我需要能够从 C++ 代码加载网格和纹理等。我目前的计划是将所有游戏资产文件放在 res/raw 目录或 assets 目录中,然后在启动时将这些文件复制到 sdcard,以便可以从 irrlicht c++ 代码访问它们。 这是使游戏媒体文件可从 c++ 访问的最佳方式吗?

【问题讨论】:

    标签: android file-io android-ndk


    【解决方案1】:

    有几种方法可以做到这一点......它们都有自己的局限性,所以如果不了解您的情况,我无法给出好的建议。以下是一些讨论链接以及一些可能对您有所帮助的建议:

    http://groups.google.com/group/android-ndk/browse_thread/thread/842ca9d7d82995b0

    http://groups.google.com/group/android-ndk/browse_thread/thread/4e25a5dfd46f8fea/1269bcd10bdb066d?lnk=gst&q=apk+compressed#1269bcd10bdb066d

    如果我知道 a) 您需要访问多少资源 b) 您将遇到的最大资源的大小,更具体地说,您的所有资源的大小均小于 1MB,我可以给您更具体的建议吗?

    【讨论】:

    • 这些是我以前没有找到的好线程。这是另一个我发现有用的thedevelopersinfo.com/2010/01/13/… 游戏还没有很好的定义,但这里有一些我需要从 c++ 访问的文件的近似值 大约 8 个大约 400k 大小 (3.2MB) 的网格 大约 8 个大约 50k 大小的纹理 (0.4 MB) 大约 20 个大约 20k 大小的纹理 (0.4MB) 1 个 193K (0.193MB) 纹理 总计大约 4.2MB 还有一个视频 249K 和一些音效 306K 但这些将在 res/raw 文件夹中并在 android 媒体中播放播放器
    • 好的,我问的原因是每个资源似乎有 1MB 的未压缩文件大小限制,而且最大资源数似乎也为 512。因为看起来你在这两者之下其中,您可以将所有资源放在“/assets”文件夹中,然后使用 AssetManager 类访问它们。如果您的 APK 是 zipaligned,AssetManager 将为您映射文件,这将大大提高速度。
    【解决方案2】:

    理论上,您可以将 InputStream 传递给本机 C++ 代码并让它调用其方法。您甚至可以在这些之上实现 istream。但是,我认为这不是您所追求的。

    请记住,APK 中的资产文件不会存储为文件。它们被压缩和存档 - APK 实际上是重命名的 ZIP 文件。因此,我建议将资产从 Java 中复制到数据文件夹中,然后将该副本的文件名传递给 C++。

    顺便说一句,这完全排除了写入这些资产的可能性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-11
      • 2012-10-30
      • 2014-06-15
      • 2011-07-24
      • 2018-11-14
      • 2015-05-04
      • 1970-01-01
      相关资源
      最近更新 更多