背景没有填满整个视图 SpriteKit
Background is not filling the whole view 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
为什么我的代码切断了背面的顶部和底部地面?
这听起来很蠢,但是你有启动屏幕吗?我遇到了同样的问题,该问题只发生在 Xcode 12 而不是 11,但我发现的主要区别是 Xcode 11 有一个启动屏幕。一旦我添加了启动屏幕故事板并将其添加到我的 plist 中,我的 SCNView 就会填满屏幕。我不确定为什么这会导致视图不遵循约束,但是在将它添加到我的其他项目后它解决了这个问题。
编辑:
您不需要启动屏幕故事板,只需在“启动屏幕界面文件基本名称”下的 plist 中添加显示场景的主故事板即可。
这肯定是没有分配启动屏幕造成的。很奇怪 Xcode 12 默认情况下对 SpriteKit 有这种行为。我相信很多人都会感到困惑和困惑。我注意到与早期版本的主要明显区别是缺少启动屏幕。
您可以创建启动屏幕并分配它,或者按照之前的建议将 Main.storyboard 定义为启动屏幕。使其正常工作的最简单方法可能是转到项目目标,然后转到常规并选择“主要”,其中显示“启动屏幕文件”。这将使它按预期工作。
更新: 这仍然发生在 Xcode 12.4 (12D4e) 中。令人惊讶的是,启动屏幕将在 brand-new iOS-only 项目中丢失,而它在 multi-platform 项目中。这似乎是苹果方面的疏忽。
如何select Main 作为项目的启动屏幕文件:
出于某种原因,我的代码不会填满整个 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
为什么我的代码切断了背面的顶部和底部
这听起来很蠢,但是你有启动屏幕吗?我遇到了同样的问题,该问题只发生在 Xcode 12 而不是 11,但我发现的主要区别是 Xcode 11 有一个启动屏幕。一旦我添加了启动屏幕故事板并将其添加到我的 plist 中,我的 SCNView 就会填满屏幕。我不确定为什么这会导致视图不遵循约束,但是在将它添加到我的其他项目后它解决了这个问题。
编辑: 您不需要启动屏幕故事板,只需在“启动屏幕界面文件基本名称”下的 plist 中添加显示场景的主故事板即可。
这肯定是没有分配启动屏幕造成的。很奇怪 Xcode 12 默认情况下对 SpriteKit 有这种行为。我相信很多人都会感到困惑和困惑。我注意到与早期版本的主要明显区别是缺少启动屏幕。
您可以创建启动屏幕并分配它,或者按照之前的建议将 Main.storyboard 定义为启动屏幕。使其正常工作的最简单方法可能是转到项目目标,然后转到常规并选择“主要”,其中显示“启动屏幕文件”。这将使它按预期工作。
更新: 这仍然发生在 Xcode 12.4 (12D4e) 中。令人惊讶的是,启动屏幕将在 brand-new iOS-only 项目中丢失,而它在 multi-platform 项目中。这似乎是苹果方面的疏忽。
如何select Main 作为项目的启动屏幕文件: