gpt4 book ai didi

ios - Fatal error : init(coder:) has not been implemented. 运行时哪里出错

转载 作者:行者123 更新时间:2023-11-29 05:48:42 24 4
gpt4 key购买 nike

Picture of code

我不明白如何修复该错误。如果有人明白请帮忙!

class GameScene: SKScene {
let player = SKSpriteNode(imageNamed: "playerShip")
let bulletSound = SKAction.playSoundFileNamed("bulletSound.wav", waitForCompletion: false)

var gameArea: CGRect

override init(size: CGSize)
{
let maxAspectRatio: CGFloat = 16.0/9.0
let playableWidth = size.height/maxAspectRatio
let margin = (size.width - playableWidth)/2
gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height)
super.init(size: size)
}

required init?(coder aDecoder: NSCoder)
{
fatalError("init(coder:) has not been implemented")
}

我正在尝试为屏幕上的对象设置边界。当我编写 super.init(size: size) 时,Xcode 自动创建了所需的 init?(coder aDecoder: NSCoder),但是当它运行时,我收到以下错误:

Thread 1: Fatal error: init(coder:) has not been implemented

最佳答案

因为您已经使用覆盖 init(size: CGSize) 方法覆盖了 SKScene 的指定初始化程序,因此必须实现此必需的 init?(coder aDecoder: NSCoder) 允许自定义 SKScene 类(您的 GameScene 类)、对象序列化的方法。

这篇旧文章可能会帮助您解释这一点:

What exactly is init coder aDecoder?

如果您尝试初始化 gameArea 变量,为什么不尝试在 sceneDidLoad() 的重写中设置 gameArea 呢? (下面的代码真的很糟糕):

class GameScene: SKScene {
let player = SKSpriteNode(imageNamed: "playerShip")
let bulletSound = SKAction.playSoundFileNamed("bulletSound.wav", waitForCompletion: false)

var gameArea: CGRect?

override func sceneDidLoad() {
let maxAspectRatio: CGFloat = 16.0/9.0
let playableWidth = size.height/maxAspectRatio
let margin = (size.width - playableWidth)/2

gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height)
}

<<more of your code>>
}

并消除覆盖 init(size: CGSize)

关于ios - Fatal error : init(coder:) has not been implemented. 运行时哪里出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55885550/

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