Проблема в том, что вы никогда не назначаете значение для ball
, которое является неявно необязательным, поэтому при попытке доступа к нему с помощью ball.setUp()
его значение по умолчанию nil
принудительно разворачивается.
Вместо прямого изменения свойства texture
вашего подкласса SKSpriteNode
, вам просто нужно вызвать его назначенный инициализатор Ball(imageNamed: "ball")
для создания экземпляра узла.
Поэтому измените GameScene.sks
соответственно:
override func didMove(to view: SKView) {
ball = Ball(imageNamed: "ball")
addChild(ball)
}