Нет назначенного init для SKShapeNode (circleOfRadius: radius)
Я пытаюсь создать подкласс SKShapeNode в swift как SKShapeNode (circleOfRadius: radius), но для него нет назначенного init.
У кого-нибудь есть обходные пути или информация о том, почему? Я не уверен, что это ошибка или намеренная. Я нашел это видео, демонстрирующее обходное решение для SKSpriteNode, но оно не работает для меня. https://skillsmatter.com/skillscasts/5695-how-to-subclass-a-skspritenode
В общем, я пытаюсь сделать подкласс для SKShapeNode, чтобы потом подклассы, чтобы иметь разные версии, чтобы легче управлять моим кодом.
ТИА
Спасибо Мартину, я нашел этот пример раньше. Он работает, но как бы сделать это в круг вместо прямоугольника?
import Foundation
import SpriteKit
class Player : SKShapeNode {
override init() {
super.init()
self.name = "Player"
self.fillColor = UIColor.blackColor()
}
init(rectOfSize: CGSize) {
super.init()
var rect = CGRect(origin: CGPointZero, size: rectOfSize)
self.path = CGPathCreateWithRect(rect, nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
В главном коде
let playerOne = Player(rectOfSize: CGSize(width: 100, height: 100))
Ответы
Ответ 1
как это?
class Player: SKShapeNode {
init(circleOfRadius: CGFloat){
super.init()
let diameter = circleOfRadius * 2
self.path = CGPathCreateWithEllipseInRect(CGRect(origin: CGPointZero, size: CGSize(width: diameter, height: diameter)), nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Ответ 2
Это сработало для нас.
Он позволяет использовать другие инициализаторы удобства из SKShapeNode
, но здесь есть странный синтаксис: fooobar.com/info/263353/...
class CircleNode : SKShapeNode {
override init() {
super.init()
}
convenience init(width: CGFloat, point: CGPoint) {
self.init()
self.init(circleOfRadius: width/2)
// Do stuff
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}