我正在创建一个简单的游戏,我想得到一个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)
}
}