2017-12-31 93 views
0

Ich bin ein einfaches Spiel zu schaffen, und ich mag die tatsächlich Größe (Breite/Höhe) eine SpriteKit Szene bekommen, um die Lage sein, eine SKNode (/ SKSpriteNode) präsentiert die gesamte Anzeige zu füllen, aber anscheinendSwift: Wie bekommt man die Größe einer Spritekit Scene um einen SKNode Fullscreen zu präsentieren?

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

oder etwas Ähnliches funktioniert nicht. Der Knoten wird dargestellt, ist aber nur ein Viertel der tatsächlichen Bildschirmgröße.

stelle ich die SKScene von GameViewController.swift wie folgt aus:

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 
    } 

So wie man das eigentlich SpriteKit Szene Größe bekommen könnte oder gibt es eine andere Möglichkeit, eine SKNode/SKSpriteNode Vollbild in einem GameScene zu präsentieren?

Update: Ich habe versucht, dies auch:

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

, die mich für ein iPhone 8 375x667 als Größe gibt, aber der Knoten immer noch als ein Viertel des Bildschirms angezeigt wird.

+1

Probieren Sie die Szene Einstellung 'anchorPoint' bis (0.5, 0.5) und stellen Sie' backgroundNode.position = CGPoint.zero ' – 0x141E

Antwort

0

Ich habe ein Beispielprojekt mit dem folgenden Code erstellt. Dies erzeugt einen rot gefärbten Knoten, der den Bildschirm ausfüllt. Sie können UIScreen.main.bounds verwenden und ich verwende es hier als eine globale Variable. Ich finde es auf diese Weise hilfreich, da ich von jeder Codedatei darauf zugreifen kann, da ich oft die Bildschirmgröße in einer Berechnung verwenden muss.

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) 
    } 
} 
+0

Ich würde nicht empfehlen, Code in 'ViewWillLayoutSubviews' zu machen Diese Methode wird mehrmals aufgerufen – Knight0fDragon

Verwandte Themen