【问题标题】:SpriteKit support different screen sizesSpriteKit 支持不同的屏幕尺寸
【发布时间】:2015-01-12 09:41:14
【问题描述】:
我想创建game like this。这是益智游戏。
我的问题是我是否需要为每个设备提供不同的图像?所以目前我们可以看到 Apple 有 5 种不同的移动设备尺寸:
- iPhone 3.5''
- iPhone 4''
- iPhone 4.7''
- iPhone 5.5''
- iPad
所以我的问题是,如果我有适用于 iPad 视网膜的资产,那么我还需要另外 4 个具有 iPhone 尺寸背景和拼图图像的相同资产吗?或者我可以优化它?例如,如果我们创建 3d 游戏,openGL 只渲染需要的帧,我们不需要像我们拥有的设备一样多的场景,只需要一个。
【问题讨论】:
标签:
ios
objective-c
sprite-kit
【解决方案1】:
像这样检测设备并设置您的资产。
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
CGSize result = [[UIScreen mainScreen] bounds].size;
if (result.height == 480)
{
// Setup iPhone 4, 4s, iPod Touch Assets
}
else
{
// Setup iPhone 5, 5s, 6 Assets
}
}
else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
//Setup iPad Assets
}
【解决方案2】:
在支持不同的屏幕尺寸时需要考虑许多因素。要考虑的一个重要因素是您是否想要单独的非视网膜和视网膜 (@2x) 版本的资产。您可以决定只使用视网膜图像并让它们在非视网膜设备上按比例缩小,但它不会被优化,因为您会将完整的纹理加载到内存中。
下一个要考虑的因素是您的资产规模。您是否打算让游戏在更大的设备上拥有更大的资产?或者您是否计划保持资产大小相同但为更大的设备提供更大的视口? (即 iPhone 可能有可滚动的视图,而 iPad 不需要滚动,因为它会有更大的视图)
下一个要考虑的因素是资产的纵横比。当您的纵横比不同时(例如通常在背景图像、启动屏幕等的情况下),您肯定需要不同的资源。
我建议您使用 Apple 的 Images.xcassets 文件夹。它将允许您在所有不同的设备上组织所有资产。关于不同分辨率下场景缩放的更多信息,我建议你阅读我的回答here