我正在使用Xcode 6,iOS 8 beta 5中的SpriteKit.所有内容都在iPhone 4S模拟器上完成并完美运行,但是当切换到5S时,屏幕底部的元素被切断.
根据我的理解,iPhone屏幕的左下角应该是CGPoint(0,0),但是在通过将坐标打印到控制台来检查位置后,我可以点击左边角落的最低点(5, 44).在我的场景设置中有什么问题导致了这个吗?
没有对GameViewController文件进行任何更改,甚至在我剥离GameScene文件后问题仍然存在.
任何人都可以至少指出我正确的方向吗?
我正在使用Swift以纵向模式为所有iOS设备创建通用游戏.在GameViewController中,我正在创建这样的场景:
let scene = GameScene(size:CGSize(width: 1536, height: 2048))
scene.scaleMode = .AspectFill
Run Code Online (Sandbox Code Playgroud)
背景图像的分辨率为1536x2048,因此在iPad上以scaleMode显示其全尺寸,在iPhone 6上显示1152x2048,侧面修剪.在所有设备上都可以正常工作,只需要一个背景图像.问题是,如果我调用size.width或self.frame.size.width,它总是返回1536,即使实际可见区域是例如1152.
如何设置SkSpriteNode相对于可见区域的位置,以便它例如从每个设备的角落50x50?
我之前因为篇幅很大而道歉,但是每个试图制作某种通用应用程序的人都知道这是非常有问题的东西,所以请对我很轻松......
目标
我想要实现的目标(如上图所示)是在iPhone 5和6上使用@ 2x资源,并保持应用程序的外观相同.并且如果可能的话,在没有基于检测到的设备手动计算节点的比例和位置属性的情况下完成所有这些...简而言之,如何实现该应用程序自动约束元素(和场景)之间的比例?另外,我想在iPhone 6+上使用@ 3x资产看一眼应用,但由于简单,我只专注于iPhone 5和6.
我在网上发现的是有些人说这个(下采样)是由iOS自动完成的,例如他们建议:
"为iPhone 6制作大小为@ 2x的资产,然后iOS将自动为iPhone 5进行缩减".
但是当谈到Spritekit场景时,这显然不是真的,或者我遗漏了一些东西.
问题
即使iPhone 6和iPhone 5具有相同的宽高比和相同的PPI,使用相同的资产与场景尺寸(第1和第2图像上的外观菜单精灵与场景尺寸相比)看起来也不一样,因为PPI与像素密度,iPhone 6有更多的空间(更大的对角线,更大的英寸),这意味着它有比iPhone 5更多的像素.这是我的问题的来源,我不知道什么是一个有效的方法来处理它.
到目前为止我做了什么
第二个图像不是GUI的问题,但对于游戏玩法,在我的情况下是,因为我想在不同的设备上具有相同的外观和感觉.只看第一和第三张图片.
感谢Skyler Lauren的建议,我已经设法在7.1或8.1系统以及iPhone 6上的所有iPhone 5设备上看到相同的应用程序.所以现在,问题是如何使这个代码适用于iPhone 6 +使用@ 3x纹理,以及iPhone 4s.这是iPhone 5和6的解决方案:
查看controller.m
GameScene *scene = [GameScene sceneWithSize:CGSizeMake(375,677)];//fixed instead of view.bounds.size
scene.scaleMode = SKSceneScaleModeAspectFill;
Run Code Online (Sandbox Code Playgroud)
所以场景总是在iPhone 6尺寸上具有固定尺寸,并且视图尺寸根据设备而变化.我正在使用资产目录来启动图像而不是xib文件.图像尺寸为推荐尺寸 - 640x960px 4s,640x1136px 5,750x1334px 6和1242x2208 6 +型号.资产的大小适合iPhone 6,因此对于该型号,根本没有缩放.
与4s模型相关,当我使用上述方法时,每侧有两个黑条......
到目前为止,我只在模拟器和iPhone 6设备上测试了这一点(我看到在设备或模拟器上的第一张图像上看起来像).
题
就目前我所说的一切都适用于iPhone 4s(由于不同的宽高比而有两个黑条),5,6使用@ 2x资产,但如何使用@ 3x资产使iPhone 6+一切正常?如果我使用375x667尺寸的场景,那么一切都正确定位并具有良好的比例,但质量受损(因为升级@ 2x)