在单独的 SKSpriteNode 子类中定义 SKSpriteNode 的 physicsBody - Swift2

Define physicsBody of a SKSpriteNode in a separate SKSpriteNode subclass - Swift2

我有一个class叫Bird,就是一个SKSpriteNode。我确实初始化了它,但我不知道如何在同一个 class 而不是在 GameScene class.

中设置它的 physicsBody 和其他属性

鸟class:

import SpriteKit

class Bird: SKSpriteNode {

    init() {
        let texture = SKTexture(imageNamed: "birdy")
        let size = texture.size()

        super.init(texture: texture, color: UIColor.clearColor(), size: CGSizeMake(size.width/4, size.height/4))
        }

        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }

GameScene中设置Bird属性的函数:

var birdSprite: Bird!

func setupBird() {
    birdSprite = Bird()
    birdSprite.position = CGPointMake(size.width*0.5, size.height*0.2)
    birdSprite.zPosition = Layer.Bird.rawValue
    self.addChild(birdSprite)

    birdSprite.physicsBody = SKPhysicsBody(circleOfRadius: birdSprite.size.width/2)
    birdSprite.physicsBody?.categoryBitMask = PhysicsCategory.Bird
    birdSprite.physicsBody?.collisionBitMask = PhysicsCategory.None
    birdSprite.physicsBody?.contactTestBitMask = PhysicsCategory.Desk
    birdSprite.physicsBody?.allowsRotation = false
    birdSprite.physicsBody?.restitution = 0
    birdSprite.physicsBody?.usesPreciseCollisionDetection = true
}

我尝试通过在 Bird class 中定义它来设置它的物理体,使用 self.physicsBody = ...,但这给了我一个错误,以及在init 函数,所以我没有在代码中包含它。

我想单独做的原因 class 是因为我想学习如何编写组织良好的代码,这样代码会更具可读性和自解释性。但是我在Swift和编程方面还是个初学者,所以经验和知识的缺乏给我带来了一些麻烦。

欢迎任何帮助或建议!

您是否尝试在调用 super.init() 后设置这些属性?

由于您要设置的属性来自超类,因此只能在此调用后设置,例如:

init() {
    let texture = SKTexture(imageNamed: "birdy")
    let size = texture.size()

    super.init(texture: texture, color: UIColor.clearColor(), size: CGSizeMake(size.width/4, size.height/4))

    self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width/2)
}

我不知道你在 init() 中首先做了什么,但也许是这样。