gpt4 book ai didi

ios - fatal error : use of unimplemented initializer 'init(size:)' for class

转载 作者:IT王子 更新时间:2023-10-29 05:37:40 26 4
gpt4 key购买 nike

我在不同的设备上测试我的应用程序,发现 Sprite 移动非常不一致(与其他设备相比,在某些设备上运行速度要快得多)。我找到了 this post并按照说明从我所有的 SKScene 中删除了大小参数,然后我得到了错误:

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")
}
}

游戏 View Controller :

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)!
}
}

最佳答案

你让我看一下这个问题。

您的游戏在不同设备上感觉不一致,因为您在 GameViewController 中将场景缩放模式设置为 .resizeFill。在大多数情况下,默认的 .aspectFill 设置是最佳选择。

关于错误消息,当您不使用 xCode 级别编辑器时,您需要在 init 方法中为场景指定一个大小,例如

let scene = GameScene(size: CGSize(width: ..., height: ...))

基本上有两种尺寸选择

1)将场景大小设置为iPad,这是我个人的做法。这也是 Apple 在 DemoBots 中使用的,也是 xCode 7 中的默认设置。因此场景大小为 1024x768(横向)或 768x1024(纵向)。

我在设计游戏区域时考虑了 iPhone,并在 iPad 上简单地显示更多背景,通常是地面和天空。这就是我喜欢玩的许多流行游戏所做的,例如Modern Combat 5、Limbo、Altos Adventure、Leos Fortune、The Line Zen、Tower Dash。

2) 将场景大小设置为 iPhone,并在 iPhone 上显示更多背景,在 iPad 上显示更少背景,例如光之城。所以场景大小将是 xCode 8 使用的大小,1334x750(横向)或 750x1334(纵向)。

这样一来,您的游戏在所有设备上都应该保持一致。您可能唯一需要做的就是在 iPad 和 iPhone 之间调整一些 UI,例如按钮定位。

希望对你有帮助

关于ios - fatal error : use of unimplemented initializer 'init(size:)' for class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40494876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com