Поскольку вы переопределили указанный инициализатор для SKScene с помощью вашего метода override init(size: CGSize)
и, следовательно, должны реализовать этот метод required init?(coder aDecoder: NSCoder)
, чтобы разрешить пользовательский класс SKScene (ваш класс GameScene), сериализация объекта.
Эта старая статья может помочь вам объяснить:
Что такое init-кодер aDecoder?
Если вы пытаетесь инициализировать переменную gameArea
, почему бы просто не попробовать что-то вроде установки gameArea
в переопределении sceneDidLoad()
? (действительно ужасный код ниже):
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>>
}
и исключить override init(size: CGSize)