我在尝试使我的SpriteKit游戏在所有设备上兼容时遇到一些问题。我了解Image.xcassets的工作原理,以及如何在放置节点时引用电话框架。
例如,我的游戏在6、6+和iPad上看起来不错。不幸的是,它是早期iPhone的最高门槛。一个简单的解决方法是像这样引用屏幕顶部:
node.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMaxY(self.frame) - 5)
这适用于所有手机,但不适用于iPad
但是,如果我这样引用设备的顶部,则在iPad上,较高的节点位于屏幕上方,以至于英雄无法与之交互。
我的代码用于定位节点的当前方式仅是通过使用其他节点来构建:
node.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMinY(self.frame) + node2.size.height + node3.size.height)
适用于6、6+和iPad
我如何才能做到所有设备都兼容?我知道我可以调整“2x”图像,使其适合5s和5s,但随后它将使游戏机制失效6(因为6和5系列出于某种原因共享“2x”)。
有没有一种方法可以专门测试要在特定设备上使用,然后在这种情况下运行特定代码?有什么解决办法吗?谢谢。
最佳答案
使用Swift中的三元运算符可以更容易地实现这一点:
这会检查高度大于iphone 6+的尺寸,这意味着它是iPad,然后相应地设置自定义尺寸的图像,您甚至可以使用上面发布的Lucas宏:
asdf!.qrImageView.image = UIScreen.mainScreen().bounds.height > 736 ? UIImage(named: "check") : UIImage(named: "bubbles")
这是完整的代码,现在尝试一下,显然可以根据您的需要更改图像,上面的调用使用的是非常自定义的UIView子类,而下一个调用不是,而是使用UIImageView:
override func viewDidLoad() {
super.viewDidLoad()
var floatiesW = 200 as CGFloat
var floatiesH = 200 as CGFloat
var asdf = UIImageView()
asdf.backgroundColor = UIColor.redColor()
asdf.frame = CGRectMake((self.view.bounds.width/2.0) - (floatiesW/2.0), (self.view.bounds.height/2.0) - (floatiesH/2.0), floatiesW, floatiesH)
asdf.image = self.view.bounds.height > 736 ? UIImage(named: "check") : UIImage(named: "bubbles")
self.view.addSubview(asdf)
}
和这个:
UIScreen.mainScreen().bounds.height > 736 ? UIImage(named: "check") : UIImage(named: "bubbles")
在大多数情况下可以与此互换:
self.view.bounds.height > 736 ? UIImage(named: "check") : UIImage(named: "bubbles")
但要小心,您可能应该使用UIScreen.main ..