Фон не заполняет весь вид SpriteKit
По какой-то причине мой код не заполнит всю SKScene. Вот код, который я использую в Xcode 12 Beta 5.
GameScene.swift
class GameScene: SKScene {
override func didMove(to view: SKView) {
let background = SKSpriteNode(imageNamed: "space")
background.zPosition = 0
background.anchorPoint = CGPoint(x: 0.5, y: 0.5) // default
background.position = CGPoint(x: frame.midX, y: frame.midY)
print("frame.size \(frame.size)")
print("self.size \(self.size)")
print("view \(view.frame.size)")
background.size = CGSize(width: self.size.width, height: self.size.height)
self.addChild(background)
}
}
GameViewController.swift
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let scene = GKScene(fileNamed: "GameScene") {
if let sceneNode = scene.rootNode as! GameScene? {
// Present the scene
if let view = self.view as! SKView? {
sceneNode.size = view.bounds.size
sceneNode.anchorPoint = CGPoint.zero
sceneNode.scaleMode = .aspectFit
print("view.bounds.size \(view.bounds.size)")
view.presentScene(sceneNode)
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
}
}
override var shouldAutorotate: Bool {
return true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
if UIDevice.current.userInterfaceIdiom == .phone {
return .allButUpsideDown
} else {
return .all
}
}
override var prefersStatusBarHidden: Bool {
return true
}
}
Также по какой-то причине мой размер представления сообщает ->
frame.size (320.0, 480.0) self.size (320.0, 480.0) view (320.0,480.0)
Но мой GameScene.sks настроен на -> w750, h1336
1 ответ
Это будет звучать глупо, но есть ли у вас экран запуска? У меня была та же проблема, которая возникла бы только в Xcode 12, а не 11, но основное различие, которое я обнаружил, заключалось в том, что Xcode 11 имеет экран запуска. Как только я добавил раскадровку экрана запуска и добавил ее в свой список, мой SCNView заполнил экран. Я не уверен, почему это может привести к тому, что представление не будет следовать ограничениям, но после добавления его в другие мои проекты проблема устраняется.
Изменить: вам не нужно иметь раскадровку экрана запуска, вы можете просто добавить свою основную раскадровку, которая отображает вашу сцену в списке под "Базовое имя файла интерфейса экрана запуска".
Это определенно вызвано отсутствием назначенного экрана запуска. Очень странно, что Xcode 12 по умолчанию имеет такое поведение для SpriteKit. Я уверен, что многие люди будут озадачены и сбиты с толку. Я заметил, что основным видимым отличием от более ранних версий было отсутствие экрана запуска.
Вы можете либо создать экран запуска и назначить его, либо определить Main.storyboard в качестве экрана запуска, как предлагалось ранее. Вероятно, самый простой способ заставить его работать - это перейти к цели проекта, затем "Общие" и выбрать "Main", где указано "Launch Screen File". Это заставит его работать так, как ожидалось.
Как выбрать Main в качестве файла экрана запуска вашего проекта: