背景没有填满整个视图 SpriteKit

Posted

技术标签:

【中文标题】背景没有填满整个视图 SpriteKit【英文标题】:Background is not filling the whole view SpriteKit 【发布时间】:2020-12-12 02:31:57 【问题描述】:

由于某种原因,我的代码不会填满整个 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

为什么我的代码会截断背面ground 的顶部和底部?

【问题讨论】:

【参考方案1】:

这听起来很愚蠢,但你有启动屏幕吗?我遇到了同样的问题,它只会在 Xcode 12 而不是 11 中发生,但我发现的主要区别是 Xcode 11 有一个启动屏幕。一旦我添加了启动屏幕故事板并将其添加到我的 plist 中,我的 SCNView 就会填满屏幕。我不确定为什么这会导致视图不遵循约束,但在将其添加到我的其他项目后,它解决了这个问题。

编辑: 您不需要启动屏幕故事板,只需在“启动屏幕界面文件基本名称”下的 plist 中添加显示场景的主故事板即可。

【讨论】:

是的,出于某种原因,在 Xcode 12 中它们不包括启动屏幕。我希望我能早点读到这个。但是我将此 UILaunchStoryboardNameLaunchScreen 添加到我的 plist 和宾果游戏中!图像填满整个屏幕。为什么是苹果,你折磨我们吗? 在info.plist中添加key好像可以解决问题!【参考方案2】:

这肯定是由于没有分配启动屏幕造成的。很奇怪,Xcode 12 默认对 SpriteKit 有这种行为。我相信很多人都会感到困惑和困惑。我注意到与早期版本的主要明显区别是缺少启动屏幕。

您可以创建一个启动屏幕并将其分配或将 Main.storyboard 定义为启动屏幕,如前所述。让它工作的最简单的方法可能是转到项目目标,然后是 General 并选择“Main”,其中显示“Launch Screen File”。这将使它按预期工作。

更新:这仍然发生在 Xcode 12.4 (12D4e) 中。令人惊讶的是,在一个全新的纯 ios 项目中将缺少启动屏幕,而在多平台项目中却存在。这似乎是 Apple 的疏忽。

如何选择 Main 作为项目的启动屏幕文件:

【讨论】:

哦,伙计,设置启动屏幕文件做到了。谢谢

以上是关于背景没有填满整个视图 SpriteKit的主要内容,如果未能解决你的问题,请参考以下文章

为啥背景图片没有填满整个div

使用自动布局强制 UITableView 中的 UIView 填满屏幕

窗口没有填满整个屏幕

CSS Grid没有填满整个视口[重复]

从底部加载视图不会填满整个视图

设置变异 TableViewController 的背景图像