Spritekit扩展为通用应用程序

时间:2017-06-24 15:42:31

标签: ios swift sprite-kit

我无法正确设置应用,以便在所有设备上正确显示。我希望我的游戏看起来最适合iPhone,我明白使用GameScene(size: CGSize(width: 1334, height: 750))设置我的场景大小并使用.aspectFill意味着在iPad上显示的内容会更少,我可以使用。问题是,如何定位我的节点,使它们相对于每个设备的框架高度和宽度?我使用self.frame.heightself.frame.widthself.frame.midX等来定位我的节点,当我运行游戏时,考虑到我在iPhone 6上运行,它会正确定位,但在我的iPad上,一切似乎都被炸毁了,节点也不在屏幕上。我试图解决这个问题我疯了

2 个答案:

答案 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上,它将进行更改。

如果这很难理解,请告诉我,以便我可以解释