我创建了一个定义类型SKShapeNode
球的类。课堂内' init()
方法我尝试初始化球的physicsBody
属性。不幸的是,这个功能并没有真正起作用 - 它并没有初始化它的属性。我不确定问题是什么,或者我是否可以在函数内初始化这些属性。
这是我的代码:
class BallNode: SKShapeNode {
var radius:CGFloat = 0
var color:UIColor?
var strokeWidth:CGFloat = 0
private var _name:String?
override init() {
super.init()
self.fillColor = ranColor()
self.setPhysics(body: self)
self.lineWidth = strokeWidth
}
这是我在课堂上写的函数:
func setPhysics(body: SKShapeNode) {
body.physicsBody?.affectedByGravity = false
print("gravity = F")
body.physicsBody?.restitution = 0.2
body.physicsBody?.isDynamic = false
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
我知道该函数正在运行,因为它在控制台中打印:
gravity = F
但它并没有真正发挥作用,因为球受重力影响(默认)。
我错了什么?
更新:
如果我在我的touchesBegan
内部设置了这些属性,那么它正在运行。例如:
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)
ball.Name = "BALL"
print(ball.Name)
ball.position = positionOfTouch
ball.physicsBody?.affectedByGravity = true
ball.physicsBody?.isDynamic = false
self.addChild(ball)