【发布时间】:2017-03-22 13:11:15
【问题描述】:
我在不同设备上测试我的应用,发现精灵的动作非常不一致(与其他设备相比,在某些设备上运行速度要快得多)。我找到了this post 并按照说明从我所有的SKScenes 中删除了大小参数,然后我得到了错误:
fatal error: use of unimplemented initializer 'init(size:)' for class 'SuperGame.PosterScene'
请查看下面我的PosterScene 类和调用它的GameViewController 类。
海报场景
class PosterScene: SKScene {
override init(){
super.init()
let posterImage = SKSpriteNode(imageNamed: "poster")
posterImage.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
self.addChild(posterImage)
let sequence = SKAction.sequence([ SKAction.wait(forDuration: 3.0), SKAction.run({ self.changeToMainMenuScene() }) ])
self.run(sequence)
}
func changeToMainMenuScene () {
let mainMenuScene = MainMenuScene()
self.view!.presentScene(mainMenuScene)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
游戏视图控制器:
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
let skView = self.view as? SKView
if skView?.scene == nil {
skView?.showsFPS = true
skView?.showsNodeCount = true
skView?.showsPhysics = true
skView?.ignoresSiblingOrder = false
//starting the game with the Poster Scene
let posterScene = PosterScene()
posterScene.scaleMode = .resizeFill
skView?.presentScene(posterScene)
}
}
override var shouldAutorotate : Bool {
return true
}
override var supportedInterfaceOrientations : UIInterfaceOrientationMask {
if UIDevice.current.userInterfaceIdiom == .phone {
return UIInterfaceOrientationMask.allButUpsideDown
} else {
return UIInterfaceOrientationMask.all
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Release any cached data, images, etc that aren't in use.
}
override var prefersStatusBarHidden : Bool {
return true
}
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)!
}
}
【问题讨论】:
-
你应该覆盖
init(size:),而不是init() -
@dan 我最初使用的是
init(size:),它没有给出任何错误,但精灵速度在不同设备上有所不同。为了解决精灵速度变化的问题,我按照链接问题中的建议删除了 size 参数。 -
@iGetIt,现在我可以在代码中看到这一点,你误会我了,我没有说不要使用
size:我说不要使用size:view.frame.size。如果您必须 100% 在代码中工作(我不建议这样做,分离设计和功能会使生活轻松 1000 倍)那么您应该选择静态大小,而不是基于视图的大小,因为目标是在所有设备,使其看起来相同。
标签: ios swift sprite-kit swift3