很抱歉,因为本文内容较多,但是每个试图创建某种通用应用程序的人都知道这是相当棘手的事情,所以请对我宽容一些...
目标
我想要实现的目标(如上图所示)是在iPhone 5和6上使用@2x资源,并保持应用程序的相同外观。如果可能的话,不需要根据检测到的设备手动计算节点的比例和位置属性...所以简而言之,如何使应用程序自动约束元素(和场景)的比例和间距?同时,我希望在iPhone 6+上使用@3x资源时应用程序的外观相同,但由于简单起见,我只集中在iPhone 5和6上。
我在网上找到的是,有些人说iOS会自动进行此操作(降采样),例如他们建议这样做:
"制作iPhone 6大小的@2x资源,然后iOS将自动缩小到iPhone 5"。
但是,当涉及到Spritekit场景时,显然不是这样的,或者我错过了什么。
问题
尽管iPhone 6和iPhone 5具有相同的纵横比和相同的PPI,但使用相同的资源与场景大小不同(请参见菜单精灵在第一张和第二张图像上与场景大小的比较),因为PPI与像素密度相关,而iPhone 6拥有更多的空间(更大的对角线,更多的英寸),这意味着它比iPhone 5具有更多的像素。这就是我的问题所在,我不知道如何有效地处理它。
到目前为止我做了什么
对于GUI来说,第二张图像并不是一个问题,但对于游戏玩法而言,在我的情况下却是一个问题,因为我希望在不同的设备上具有相同的外观和感觉。 只需查看第一张和第三张图像。
多亏了Skyler Lauren的建议,我已经成功地在所有iPhone 5设备上实现了应用程序的相同外观,无论是7.1还是8.1系统以及iPhone 6。因此,现在的问题是如何使这个代码适应在iPhone 6+上使用@3x纹理,以及在iPhone 4s上使用。以下是iPhone 5和6的解决方案:
View controller.m
GameScene *scene = [GameScene sceneWithSize:CGSizeMake(375,677)];//fixed instead of view.bounds.size
scene.scaleMode = SKSceneScaleModeAspectFill;
因此,该场景始终具有iPhone 6尺寸的固定大小,视图大小根据设备而变化。我使用启动图像资源目录而不是xib文件。图像的大小为推荐大小-4s的640x960px,5的640x1136px,6的750x1334px和6+型号的1242x2208。资源面向iPhone 6的尺寸因此对于该型号没有任何缩放。
与4s型号相关的是,当我使用上述方法时,每侧都有两个黑色条...
到目前为止,我只在模拟器和iPhone 6设备上测试过(我在设备或模拟器上看到的第一张图片)。
问题
目前,正如我所说,使用@2x资源在iPhone 4s(由于不同的纵横比而出现两个黑色条),5,6上都可以工作,但如何使用@3x资源使一切都适用于iPhone 6+? 如果我将375x667的尺寸用于该场景,则一切都定位正确且比例良好,但质量会受到影响(由于@2x的放大)。