2016-02-06 2 views
1

Xcode выдает ошибку, и я не знаю, как ее решить. Может, кто-то может дать мне руку или хороший намек?Сцена игры не может быть построена, потому что у нее нет доступных инициализаторов

Вот мой код, который работает в моих сценах игр:

var currentLevel: Int = 1 

var platforms: PlatformsNode! 
var platformNode1: PlatformNode! 
var platformNode2: PlatformNode! 
var platformNode3: PlatformNode! 

var platformArray = [SKNode]() 

let passenger = SKSpriteNode(imageNamed: "passenger") 

var passengerNumber:Int = 1 
var startPlatform =   [3, 3, 2, 1, 2] 
var destinationPlatform = [1, 1, 3, 2, 1] 

// Level selection 
class func level(levelNum: Int) -> GameScene? { 
    let scene = GameScene(fileNamed: "Level\(levelNum)")! // <- compiler error 
    scene.currentLevel = levelNum 
    scene.scaleMode = .AspectFill 
    return scene 
} 

Как только я хочу, чтобы заменить let passenger = SKSpriteNode(imageNamed: "passenger") с let passenger: PassengerNode! компилятор падает ошибку компилятора «Game Scene не может быть построены, потому что он имеет не доступные инициализаторы ". И эта ошибка просто появляется, когда я изменяю способ, которым я хочу объявить, пусть пассажир. Причина, по которой я хочу ее изменить, заключается в том, что я хочу заменить его классом, чтобы пассажир a. могут иметь другой тип с другой текстурой (это может быть решено по-разному) b. могут быть удалены из родителя, а затем добавлены снова - с надеждой нет ошибок.

У вас есть идеи? Я действительно застрял как-то: -?

ответ

1

Объявление пассажира только с его типом и без начального значения требует, чтобы вы добавляли init() в свой класс, потому что компилятор не знает, какое начальное значение оно дает, когда объект создан.

Вы можете либо создать Init() и установите значение для пассажира или delare как

let passenger: PassengerNode! = nil 

(это предполагает, что ваш код не ссылается на переменном перед убедившись, положить что-то в нем или чеках для nil/optional перед использованием).

Смежные вопросы