2017-12-31 6 views
0

私は簡単なゲームを作成していると私は、ディスプレイ全体を埋めるためにSKNode(/ SKSpriteNode)を提示することができるようにSpriteKitベースシーンの実際のサイズ(幅/高さ)を取得したいと思いますが、どうやらSwift:Spritekit Sceneのサイズを取得してSKNodeフルスクリーンを表示する方法は?

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

などは動作しません。ノードは表示されますが、実際の画面サイズのわずか4分の1です。

私はこのような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.5、0.5)にシーンの 'anchorPoint'を設定してみてくださいと設定' backgroundNode.position = CGPoint.zero ' – 0x141E

答えて

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

' viewWillLayoutSubviews'でコードを実行することはお勧めしません。このメソッドは複数回呼び出されます – Knight0fDragon

関連する問題