我以编程方式从视图控制器(将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
s,SKLabel
s等。)
有没有人知道如何解决这个问题?
非常感谢提前。
PS:通过SKS展示工作正常,iPad上存在SKLabel
定位问题。这个方法的问题在于我还没有找到如何通过SKS将我的自定义变量difficulty
传递到场景,即使我在故事板中将其自定义类更改为我的,所以应该这样做太
答案 0 :(得分:1)
这里你真的有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文件并一直设置它们。