Наследовать SKShapeNode

Почему можно создать такой экземпляр SKShapeNode

let circle = SKShapeNode(circleOfRadius: 10)

Но когда я хочу создать класс, наследующий форму SKShapeNode, я не могу сделать что-то вроде этого:

public class Player:SKShapeNode{

public var playerName : String
private var inventory: [enumObject]

init(nameOfPlayer:String, position:CGPoint, radious: CGFloat) {

super.init(circleOfRadius: radious)
self.position = position
self.fillColor = SKColor.white

playerName = nameOfPlayer

inventory = [enumObject]()
}

}

В нем говорится, что этот init не предназначен для SKShapeNode, я искал об этом, но не смог найти правильный способ создания этого проклятого круга.


person GGirotto    schedule 20.03.2017    source источник


Ответы (1)


SKShapeNode.init(circleOfRadius:) — это удобный инициализатор для SKShapeNode, поэтому вы не можете вызывать его из инициализатора Swift. Swift применяет назначенный шаблон инициализатора более строго, чем это делает Objective C.

К сожалению, похоже, что назначенный инициализатор для SKShapeNode — это просто init, поэтому вам нужно будет сделать что-то вроде этого:

public class Player: SKShapeNode {
    public var playerName : String
    private var inventory: [enumObject]

    init(nameOfPlayer:String, position:CGPoint, radius: CGFloat) {
        playerName = nameOfPlayer
        inventory = [enumObject]()

        super.init()

        self.path = CGPath(ellipseIn: CGRect(origin: .zero, size: CGSize(width: radius, height: radius)), transform: nil)

        self.position = position
        self.fillColor = SKColor.white
    }

    // init?(coder:) is the other designated initializer that we have to support
    public required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Приведенный выше код работает для создания подкласса SKShapeNode, но, учитывая API, предоставляемый Apple, и учитывая, как ваш код может измениться в будущем, может иметь смысл создать подкласс SKNode, содержащий один или несколько SKShapeNode. В этой настройке, если вы хотите представить игрока как нечто большее, чем просто круг, вы можете просто добавить дополнительные узлы к узлу игрока.

person Dave Weston    schedule 20.03.2017