我正在以编程方式从视图控制器(将difficulty字符串传递给它)呈现游戏控制器/游戏场景,如下所示:

class GameController: UIViewController {

    var difficulty: String!

    override func loadView() {

        self.view = SKView(frame: UIScreen.main.bounds)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let skView = self.view as! SKView

        let scene = GameScene(size: view.frame.size)
        // Set the scale mode to scale to fit the window
        scene.scaleMode = .aspectFill
        scene.difficulty = difficulty
        // Present the scene
        skView.presentScene(scene)

        skView.ignoresSiblingOrder = true
    }
}


但是,当场景出现在屏幕上时,所有内容都会“放大”(SKSpriteNodeSKLabel等)。

有谁知道如何解决这个问题?

提前谢谢了。

PS:通过SKS演示可以正常工作,只是在iPad上SKLabel定位存在问题。这种方法的问题在于,即使我将其自定义类更改为在Storyboard中进行挖掘,我也无法找到如何通过SKS将自定义变量difficulty传递给场景的方法。

最佳答案

您这里确实有2个问题。首先是当前设置有什么问题,其次我可以使用sks文件并仍然传递数据。

回答第二个问题,是的

if let gameScene = GameScene(fileNamed: "GameScene") {

    self.gameScene = gameScene
    self.gameScene.stage = 1
    self.gameScene.setupBasedOnStage()
    self.gameScene.scaleMode = .aspectFill
    self.view?.presentScene(self.gameScene, transition: SKTransition.reveal(with: .down, duration: 1.0))
}


您可以在显示页面之前设置任何自定义属性(在本例中为阶段),如果需要,可以调用设置函数以根据阶段加载信息/图形。

我将sks文件用于场景,并一直这样设置它们。

10-05 19:14