2017-05-22 15 views
1

GameScene.sksとGameScene.swiftに問題があります。私は自分のプロジェクトにタイトル画面を追加しようとしていましたが、そこから下り坂になりました。タイトル画面は正常に動作しますが、問題はGameviewcontroller.swiftを編集するときです。ここでGameScene.sksとGameScene.swift

This is how I want it to look, mind you I deleted the gamescene.sks at the start of the project but I realized you need sks file when you switch between scenes

This is how it ends up looking when I re-add the gamescene.sks

作業ファイルへGameViewController.Swiftは前TitleScreen

import UIKit 
import SpriteKit 
import GameplayKit 

class GameViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let scene = GameScene(size: view.bounds.size) 
     let skView = view as! SKView 
     skView.showsFPS = true 
     skView.showsNodeCount = true 
     skView.ignoresSiblingOrder = true 
     scene.scaleMode = .resizeFill 
     skView.presentScene(scene) 
    } 

    override var shouldAutorotate: Bool { 
     return true 
    } 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     if UIDevice.current.userInterfaceIdiom == .phone { 
      return .allButUpsideDown 
     } else { 
      return .all 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Release any cached data, images, etc that aren't in use. 
    } 

    override var prefersStatusBarHidden: Bool { 
     return true 
    } 
} 

を追加するここでは、最初のタイトル画面をロードするためにビューを変更した後です。

import UIKit 
import SpriteKit 
import GameplayKit 

class GameViewController: UIViewController { 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     if let scene = titleScreen(fileNamed: "titleScreen") { 

       //Configure view 
       let skView = self.view as! SKView 
       skView.showsFPS = true 
       skView.showsNodeCount = true 
       skView.ignoresSiblingOrder = true 
       // Set the scale mode to scale to fit the window 
       // scene.scaleMode = .aspectFill 

       scene.size = self.view.frame.size 
       // Present the scene 
       skView.presentScene(scene) 


      } 


    } 

    override var shouldAutorotate: Bool { 
     return true 
    } 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     if UIDevice.current.userInterfaceIdiom == .phone { 
      return .allButUpsideDown 
     } else { 
      return .all 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Release any cached data, images, etc that aren't in use. 
    } 

    override var prefersStatusBarHidden: Bool { 
     return true 
    } 
} 
+2

アンカーポイントを両方の方法で検査します。同じシーンスケールモードを使用します。ノードの位置が同じであるかどうかを確認します。それらのすべてが一致すれば、同じ結果を見る必要があります。シーンやビューのサイズも違うので注意してください。 – Whirlwind

答えて

0

GameSceneのインスタンスを設定していない可能性があります。

scene.scaleMode = .resizeFillはあなたのgameviewcontrollerでのみ呼び出されます...はい?

これは、あなたの最初のシーンが設定されていることを意味します。それはあなたがあなたの次のシーンを設定する必要があり、presentSceneをしていることであるところはどこでもあなたのタイトルシーンでは、

...

func configureScene(_ scene: SKScene) -> SKScene { 
    scene.scaleMode = .resizeFill 
    scene.anchorPoint = CGPoint(x: 0.5, y: 0.5) // Or whatever you want.. 
    scene.size = UIWindow().frame.size // Or whatever size you want. 
    return scene 
} 

実装:WWが言ったようにも

// Where self is an SKScene... 
self.presentScene(configureScene(desiredScene)) 

を、フレームとシーンのサイズが異なり、すべての外観に影響します。

関連する問題