我无法正确设置应用,以便在所有设备上正确显示。我希望我的游戏看起来最适合iPhone,我明白使用GameScene(size: CGSize(width: 1334, height: 750))
设置我的场景大小并使用.aspectFill
意味着在iPad上显示的内容会更少,我可以使用。问题是,如何定位我的节点,使它们相对于每个设备的框架高度和宽度?我使用self.frame.height
,self.frame.width
,self.frame.midX
等来定位我的节点,当我运行游戏时,考虑到我在iPhone 6上运行,它会正确定位,但在我的iPad上,一切似乎都被炸毁了,节点也不在屏幕上。我试图解决这个问题我疯了
答案 0 :(得分:1)
我在游戏中通过使用scaleFactors解决了这个问题,这些数字告诉我的应用程序扩大每个长度,宽度,高度等等。然后我只是让我的游戏看起来很适合一部手机,并使用那部手机' s宽度和高度来计算我需要为其他设备放大它的因素。在此示例中,我使用 iPhone 4 作为基础,但您可以使用任何设备,只需根据该设备更改numbers。
肖像模式:
var widthFactor = UIScreen.main.bounds.width/320.0 //I divide it by the default iPhone 4 width
var heightFactor = UIScreen.main.bounds.height/480.0
横向模式:
var widthFactor = UIScreen.main.bounds.width/480.0 //I divide it by the default iPhone 4 landscape width
var heightFactor = UIScreen.main.bounds.height/320.0
然后,当您创建一个节点,例如硬币图像时,将其坐标或宽度/高度乘以scaleFactors:
let coin = SKSpriteNode(imageNamed: "coin")
coin.position = CGPoint(x: 25 * widthFactor, y: self.size.height - 70 * heightFactor)
答案 1 :(得分:1)
我认为你要找的是这个答案:https://stackoverflow.com/a/34878528/6728196
具体来说,我认为这部分是您正在寻找的(编辑以适合您的示例):
if UIDevice.current.userInterfaceIdiom == .pad {
// Set things only for iPad
// Example: Adjust y positions using += or -=
buttonNode.position.y += 100
labelNode.position.y -= 100
}
基本上,如果用户使用iPad,这只会从iPhone位置增加或减少一定数量。它不是太复杂,您可以通过屏幕的某个百分比值(self.size.width * decimalPercentage)增加或减少位置的x和y值。
使用这种方式的另一个好处是你只是修改iPhone的位置,所以它首先使用你设置的默认值。然后,如果在iPad上,它将进行更改。
如果这很难理解,请告诉我,以便我可以解释