我试图将我使用objective C制作的游戏移植到swift。我有一个场景初始化,但我得到一个坏的访问错误每当我分配我的视图控制器的视图对象到一个SKView常量。
导致错误的行在下面:
let skView = self.view as SKView
下面是一些上下文代码:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// Configure the view.
/* Pick a size for the scene */
let scene = GameplayScene(size: self.view.bounds.size, colored: false)
// Configure the view.
println("view: (self.view.description)")
let skView: SKView = self.view as SKView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
当我打印视图对象时,我在控制台中获得信息(内存地址等)。我试过把这段代码在不同的方法,如viewDidLoad等,但每次都是相同的结果。我在我的计划中启用了僵尸,但没有找到任何东西(从我可以看出,什么都没有发生)。我的游戏是一款风景游戏。有人知道是什么导致了这个讨厌的错误吗?我设置了多个断点,场景初始化得很好,println被调用,然后当视图被设置的时候它崩溃了
我在发布这个问题2分钟后就明白了。在我的测试项目中记录视图后,我注意到它甚至在self之前就已经是SKView类型了。视图为SKView线。我检查了viewController中的视图它的类是SKView。
在我的实际游戏视图控制器从UIView更改为SKView后,它工作得很好。这是一个简单的修复,但很难调试。