【问题标题】:Loading PNG image on iPhone fails, works in simulator在 iPhone 上加载 PNG 图像失败,在模拟器中工作
【发布时间】:2015-08-08 12:36:57
【问题描述】:

我刚开始在 iPhone 上测试我的项目,在启动时加载 png 图像时遇到了问题。基本上图像不会被读取 - 它存在,并且被找到,但无法处理,因此返回 NULL 纹理。我正在使用 Cocos2DX v3.4

我追查到 CCImage.cpp:

png_read_info(png_ptr,info_ptr); // 第 956 行 -- 在调试模式下我无法越过这一点,执行立即转出 -- 我怀疑这个函数内部抛出了异常

这是在这个方法里面: bool Image::initWithPngData(const unsigned char * data, ssize_t dataLen) // line 916

在网络上搜索这可能是由于 libpng 库中的一些不一致可能是由于 64 位架构造成的,尽管我对此表示怀疑 - 否则链接器会抱怨。我用 arm64 编译。

我相信这不是图像的问题,因为一切都在模拟器中运行,当我在设备上使用其他图像时,我会遇到同样的问题。

有什么想法吗?

[编辑]

这是我发现的其他信息:

1 替换为jpg文件并加载到作品中

2 有一个 cc_fps_images_png 文件正确加载,但其数据包含在可执行文件中(即静态字节数组),而不是从磁盘读取

3 我在 iPhone 6 iOS 8.1 上运行它。以下是应用启动时控制台中显示的统计信息:

{
gl.supports_vertex_array_object: true
cocos2d.x.version: cocos2d-x 3.4
gl.vendor: Apple Inc.
gl.supports_PVRTC: true
gl.renderer: Apple A8 GPU
cocos2d.x.compiled_with_profiler: false
gl.max_texture_size: 4096
gl.supports_ETC1: false
gl.supports_BGRA8888: false
cocos2d.x.build_type: DEBUG
gl.supports_discard_framebuffer: true
gl.supports_NPOT: true
gl.supports_ATITC: false
gl.max_samples_allowed: 4
gl.max_texture_units: 8
cocos2d.x.compiled_with_gl_state_cache: true
gl.supports_S3TC: false
gl.version: OpenGL ES 2.0 Apple A8 GPU - 50.6.10
}

[编辑]

更多信息:

1 我之前没有注意到这一点,但在输出中我收到以下错误消息:libpng 错误:CgBI:未处理的关键块

【问题讨论】:

    标签: iphone cocos2d-x libpng


    【解决方案1】:

    在 XCode 中转到构建设置并将设置“压缩 PNG 文件”设置为 NO。

    【讨论】:

      【解决方案2】:

      在 XCode 项目中打开“构建设置”并设置

      压缩 PNG 文件为 NO 和

      从 PNG 文件中删除文本元数据为 NO。

      【讨论】:

        【解决方案3】:

        无论压缩是打开还是关闭,我都会得到这个。此外,“从 PNG 文件中删除文本元数据”选项似乎在 XCode 8.0 中不可用。

        相反,我必须在右键单击->显示文件检查器下将 png 图像的“类型”更改为“数据”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-18
          • 1970-01-01
          相关资源
          最近更新 更多