在通用iOS应用程序中打包多个分辨率

时间:2012-07-19 04:44:34

标签: ios screen-resolution high-resolution

我正在Unity3d中编写一个3D iOS游戏,无法找到关于为不同设备包含不同纹理大小的完整而直接的答案。

首先,我假设一个真正的通用应用程序将需要每个纹理的3个版本...(非视网膜iPhone / iPod的低分辨率,视网膜iPhone / iPod和非视网膜iPad的2分辨率,现在4x res为视网膜iPad)我也假设根据苹果定义的命名约定,将应用程序下载到特定设备将只下载适当的纹理。否则,将所有三种分辨率下载到旧的非视网膜手机将包含95%的载重量。

链接的Apple文档说在视网膜设备的纹理文件名中使用“@ 2x”,以及适用于设备的“~ipad”或“~iphone”。

https://developer.apple.com/library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/SupportingHiResScreens/SupportingHiResScreens.html#//apple_ref/doc/uid/TP40010156-CH15-SW8

假设一个1024x1024的低分辨率地图集文件,并遵循上述命名约定,我们现在必须为每个图像包含四个文件,但这两个文件除文件名外是相同的吗?

例如:

(1024 x 1024) myAtlas~iphone.png
(2048 x 2048) myAtlas@2x~iphone.png 
(2048 x 2048) myAtlas~ipad.png 
(4096 x 4096) myAtlas@2x~ipad.png 

这是对的吗?

我想我的困惑源于能够轻松地为非视网膜iPad和视网膜iPhone / iPod使用相同的纹理分辨率,因为屏幕分辨率相当相似,但Apple建议的命名惯例似乎没有利用这一点。

这将是我在iOS上首次发布的应用程序,也许我完全错过了一些观点?或者我的一些假设是错的?

1 个答案:

答案 0 :(得分:1)

  1. 是的,命名惯例不提供iPhone视网膜和iPad非视网膜共享图像的方法。

  2. 命名约定仅适用于UIImage类和相关API。虽然您可以UIImage / CGImage加载OpenGL ES纹理,但您无需这样做。根据需要为文件命名,使用UIDevice类(或相应的GL API)确定屏幕大小,并使用NSBundle类自行定位相应的纹理文件。 (有关使用PVR纹理文件的一些示例,请参阅Apple示例代码站点。)

  3. 我担心您对下载到设备的内容不正确。您提交给App Store的.ipa捆绑包会被无限制地下载到您的用户安装的任何设备上 - 如果您提交具有四种不同设备分辨率资源的通用应用程序,它将安装所有四组资源在设备上即使三个未使用。