【发布时间】:2017-11-10 20:58:13
【问题描述】:
我正在尝试创建一个球的节点类。球应该有一些物理体属性——因此我创建了一个函数来初始化物理体属性。另外,我希望用户设置我通过便利 init 设置的球半径(通过 circleOfRadius)。因此,我将半径 var 设置为私有。问题是我可以将半径设置为私有变量,但是没有执行便利。 这是我的代码:
class BallNode: SKShapeNode {
var radius:CGFloat = 0
private var _R:CGFloat?
override init() {
super.init()
self.setPhysics()
}
var newBallR:CGFloat{
get {
return _R!
}
set {
_R = newValue
self.radius = _R!
print("bsllRRRR:", self.radius)
}
}
convenience init(radius:CGFloat){
self.init(circleOfRadius: radius)
self.radius = radius
print("successful init circle radius", self.radius)
}
func setPhysics() {
self.physicsBody = SKPhysicsBody.init(circleOfRadius: self.radius)
print("physics body is SET with value:", self.radius)
self.physicsBody?.affectedByGravity = true
print("gravity = T")
self.physicsBody?.restitution = 0.2
print("res = 0.2")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch: AnyObject in touches {
let positionOfTouch = touch.location(in: self)
let ball = BallNode(radius:65)
}
我知道我可以通过取消私有半径 var 并在便利初始化中声明物理体属性来解决这个问题,但我不确定它是否正确。 还有一件事,当我检查代码时_R!获得 65 值,但正如我所说的便利 init 没有执行。 有人可以帮我吗?
【问题讨论】:
标签: swift class sprite-kit skphysicsbody skshapenode