Итак, в настоящее время у меня есть игра, которую я сделал в наборе спрайтов и использовал этот способ подогнать все под размер экрана:
buyButton = SKSpriteNode(texture: SKTexture(imageNamed: "BuyButton"), color: .clear, size: CGSize(width: frame.maxX / 2.9, height: frame.maxY / 10))
buyButton.position = CGPoint(x:-frame.maxX + frame.midX*2, y: -frame.maxY + frame.midY*1.655)
addChild(buyButton)
как вы можете видеть, он использует рамку для расчета ширины и высоты вместе с положением узла на сцене, это работает со всеми размерами экрана, которые я использовал от 6s до 8 Plus. но когда дело доходит до iPhone X, с ним возникает проблема. кажется, что все растягивается из-за того, что размер экрана больше и имеет странную форму, как вы можете видеть ниже, по сравнению с iPhone 8 Plus.
Я искал решения этой проблемы, но ни одно из них не помогло или даже усугубило ситуацию, и я не мог понять, как программно использовать макет безопасной области в моем проекте набора спрайтов, как в этом решении здесь
Мой вопрос
Как мне сделать так, чтобы все поместилось на экране iPhone X, чтобы он помещался и не обрезал метки с оценками и прочее, что у меня есть в правом верхнем углу?
РЕДАКТИРОВАТЬ 2:
itemDescriptionLabel = UILabel(frame: CGRect(x: frame.maxX - 150, y: frame.maxY - 130 , width: frame.maxX / 0.7, height: frame.maxY / 3.5))
itemDescriptionLabel.font = UIFont(name: "SFCompactRounded-Light", size: 17)
itemDescriptionLabel.text = "This purchase stops all the popup ads that happen after a certain amount of time playing the game from showing up."
itemDescriptionLabel.numberOfLines = 4
itemDescriptionLabel.adjustsFontSizeToFitWidth = true
self.scene?.view?.addSubview(itemDescriptionLabel)
ИЗМЕНИТЬ 3
ИЗМЕНИТЬ 4
let safeAreaInsets = yourSpriteKitView.safeAreaInsets;
buyButton.position = CGPoint(x:safeAreaInsets.left - frame.maxX + frame.midX*2, y: safeAreaInsets.top - frame.maxY + frame.midY*1.655)
ИЗМЕНИТЬ 5
screenWidth = self.view!.bounds.width
screenHeight = self.view!.bounds.height
coinScoreLabel = Score(num: 0,color: UIColor(red:1.0, green: 1.0, blue: 0.0, alpha: 1), size: 50, useFont: "SFCompactRounded-Heavy" ) // UIColor(red:1.00, green:0.81, blue:0.07, alpha:1.0)
coinScoreLabel.name = "coinScoreLabel"
coinScoreLabel.horizontalAlignmentMode = .right
//coinScoreLabel.verticalAlignmentMode = .top
coinScoreLabel.position = CGPoint(x: screenWidth / 2.02, y: inset.top - screenHeight / 2.02)
coinScoreLabel.zPosition = 750
addChild(coinScoreLabel)
Я попробовал это на другом SpriteNode, который у меня есть, например, на этом ниже, для которого это сработало. Я понятия не имею, почему желтая метка делает это.
playButton = SKSpriteNode(texture: SKTexture(imageNamed: "GameOverMenuPlayButton"), color: .clear, size: CGSize(width: 120, height: 65))
playButton.position = CGPoint(x: inset.right - frame.midX, y: inset.bottom + frame.minY + playButton.size.height / 1.7)
playButton.zPosition = 1000
deathMenuNode.addChild(playButton)
Получилось вот так, идеально: