2017-12-31 145 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 전체 화면을 제시하는 또 다른 방법이있다?

업데이트 : 나뿐만 아니라이 시도 :

아이폰 크기로 8 375x667 날을 제공하지만, 노드가 여전히 화면의 분기로 표시됩니다
let displaySize: CGRect = UIScreen.main.bounds 
let displayWidth = displaySize.width 
let displayHeight = displaySize.height 

.

+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