我在尝试使我的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 ..

10-07 19:13
查看更多