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

时间:2017-12-31 13:32:54

标签: ios sprite-kit size fullscreen skspritenode

我正在创建一个简单的游戏,我想获得一个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但节点仍然显示为屏幕的四分之一。

1 个答案:

答案 0 :(得分:0)

我使用下面的代码创建了一个示例项目。这会创建一个填充屏幕的红色节点。您可以使用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)
    }
}