Swift:如何获得Spritekit场景的大小以呈现SKNode全屏?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift:如何获得Spritekit场景的大小以呈现SKNode全屏?相关的知识,希望对你有一定的参考价值。

我正在创建一个简单的游戏,我想得到一个SpriteKit场景的实际大小(宽度/高度),以便能够呈现一个SKNode(/ SKSpriteNode)来填充整个显示,但显然

backgroundNode.size = CGSize(width: view.frame.width, height: view.frame.height) 

或类似的东西不起作用。显示节点,但只是实际屏幕大小的四分之一。

我从GameViewController.swift中呈现SKScene,如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

    if let view = self.view as! SKView? {
        // Load the SKScene from 'GameScene.sks'
        let scene = GameScene(size: view.bounds.size)
        // Set the scale mode to scale to fit the window
        scene.scaleMode = .aspectFill

        // Present the scene
        view.presentScene(scene)

        view.ignoresSiblingOrder = true
    }

那么如何才能获得实际的SpriteKit场景大小,还是有另一种方式在GameScene中呈现SKNode / SKSpriteNode全屏?

更新:我也试过这个:

let displaySize: CGRect = UIScreen.main.bounds
let displayWidth = displaySize.width
let displayHeight = displaySize.height

这给了我一个尺寸的iPhone 8 375x667,但节点仍然显示为屏幕的四分之一。

答案

我用下面的代码创建了一个示例项目。这会创建一个填充屏幕的红色节点。您可以使用UIScreen.main.bounds,我在这里使用它作为全局变量。我觉得这样很有用,因为我可以从任何代码文件中访问它,因为我经常需要在计算中使用屏幕大小。

GameViewController.swift

import SpriteKit
let displaySize: CGRect = UIScreen.main.bounds

class GameViewController: UIViewController {

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        let skView = self.view as! SKView
        if let scene = SKScene(fileNamed: "GameScene") {
            scene.scaleMode = .aspectFill
            scene.size = view.bounds.size
            skView.ignoresSiblingOrder = true
            skView.presentScene(scene)
        }
    }
}

GameScene.swift

import SpriteKit

class GameScene: SKScene {
    let backgroundNode = SKSpriteNode()

    override func didMove(to view: SKView) {
        backgroundNode.size = CGSize(width: displaySize.width, height: displaySize.height)
        backgroundNode.color = .red
        self.addChild(backgroundNode)
    }
}

以上是关于Swift:如何获得Spritekit场景的大小以呈现SKNode全屏?的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit SKScene 未正确调整大小以适合 iPhone 12

Swift,SpriteKit:如何保存场景的整个进度

如何使用 Swift 正确切换 SpriteKit 中的 SKScene?

使用 swift 和 spritekit,你如何阻止场景在变得活跃/移动到前台后取消暂停?

如何将SpriteKit中的单个游戏场景添加到普通的单视图Swift应用程序中

如何重命名 iOS SpriteKit 模板中的默认场景?