作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个球的节点类。球应该具有一些物理主体属性 - 因此我创建了一个初始化物理主体属性的函数。另外,我希望用户能够设置球半径(通过circleOfRadius),这是我通过方便的 init 设置的。因此,我将半径 var 设置为私有(private)。问题是我可以将半径设置为私有(private)变量,但随后便利性没有被执行。这是我的代码:
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)
}
我知道我可以通过取消私有(private)半径变量并在便利初始化中声明物理体属性来解决这个问题,但我不确定它是否正确。还有一件事,当我检查代码时_R!得到 65 值,但正如我所说,便利 init 没有执行。有人可以帮我吗?
最佳答案
我认为这是因为你没有调用方便的 init。使用 BallNode(radius:65.0)
,然后它会被调用,myRadius
将被设置为 65.0 但有什么用,你没有调用 setPhysics()
在您方便的 init 中。
关于swift - 调用私有(private) var 来方便 init (swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231022/
在javascript中,我可以这样写 console.log( person.name || person.nickname || '-' ) 然后会先查找name字段,如果找不到,会回退到nick
在为通用接口(interface)编写回调时,定义他们自己负责创建和访问的本地数据可能很有用。 在 C 中,我只使用一个空指针,类 C 示例: struct SomeTool { int ty
我是一名优秀的程序员,十分优秀!