我正在以编程方式从视图控制器(将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
}
}
但是,当场景出现在屏幕上时,所有内容都会“放大”(
SKSpriteNode
,SKLabel
等)。有谁知道如何解决这个问题?
提前谢谢了。
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文件用于场景,并一直这样设置它们。