【问题标题】:GameScene.sks and GameScene.swiftGameScene.sks 和 GameScene.swift
【发布时间】:2017-05-22 23:49:51
【问题描述】:

GameScene.sks 和 GameScene.swift 存在问题。我试图在我的项目中添加一个标题屏幕,但它从那里走下坡路。标题屏幕工作正常,但问题是当我编辑 Gameviewcontroller.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

这是添加 TitleScreen 之前工作文件的 GameViewController.Swift

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
    }
}

【问题讨论】:

  • 以两种方式检查锚点。使用相同的场景比例模式。检查节点位置是否相同。如果所有这些都匹配,那么您将不得不看到相同的结果。场景和视图大小也是不同的,所以也要注意这一点。

标签: ios swift xcode sprite-kit


【解决方案1】:

我认为可能是您没有配置 GameScene 实例...

scene.scaleMode = .resizeFill 仅在您的游戏视图控制器中调用...是吗?

这意味着只有您的第一个场景被配置。

在你的标题场景中,无论你是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
}

实施:

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

也正如 WW 所说,帧和场景大小是不同的,并且会影响一切的外观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多