适用于游戏区域的iPhone和iPad的自适应设计

时间:2018-10-08 13:20:27

标签: ios swift xcode

我在游戏中使用以下代码。在iPhone上一切正常。但是在iPad上,游戏区域看起来很小,就像iPad上iPhone的区域一样。是的,我知道,这是因为 areaWidth areaHeight 。我想使其成为响应式设计。我该怎么办?

请让我知道是否需要更多信息。

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    var level: Level!

    let areaWidth: CGFloat = 33
    let areaHeight: CGFloat = 33

    let gameLayer = SKNode()

    let thingsLayer = SKNode()
    let tilesLayer = SKNode()

    var swipeFromColumn: Int?
    var swipeFromRow: Int?

    var swipeHandler: ((Swap) -> ())?

    var selectionSprite = SKSpriteNode()

    let cropLayer = SKCropNode()
    let maskLayer = SKNode()

1 个答案:

答案 0 :(得分:0)

一种快速的解决方案可能是使areaWidth和areaHeight成为视图大小的一个因素。我会将这段代码放在该View Controller的viewDidLoad()中。

areaWidth: CGFloat = self.view.bounds.width * 0.66
areaHeight = areaWidth

我假设您想将该区域保留为正方形。否则,您可以这样做:

areaHeight: CGFloat = self.view.bounds.height * 0.66

这将使您的宽度和高度大约是当前视图控制器的宽度和高度的三分之二。不过,您需要调整这些数字以适合您的需求。

编辑: 由于这是SKScene而不是ViewController类,因此没有要使用的view属性。而是在override init(size: CGSize)函数中使用SKScene的大小。首先,将属性更改为var

var areaWidth: CGFloat
var areaHeight: CGFloat

然后将以下内容添加到override init(size: CGSize)中(不要忘记将其放在super.init上方):

areaWidth = size.width * 0.66
areaHeight = areaWidth
super.init(size: size)

仍然假设您要将该区域保持正方形。