无法在函数内设置SKPhysicsBody

时间:2017-11-12 21:35:19

标签: swift sprite-kit skshapenode

我创建了一个定义类型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)

0 个答案:

没有答案