【问题标题】:Define physicsBody of a SKSpriteNode in a separate SKSpriteNode subclass - Swift2在单独的 SKSpriteNode 子类中定义 SKSpriteNode 的physicsBody - Swift2
【发布时间】:2015-10-23 18:58:13
【问题描述】:

我有一个名为 Bird 的类,它是一个 SKSpriteNode。我确实初始化了它,但我不知道如何在同一个类中而不是在 GameScene 类中设置physicsBody 和它的其他属性。

鸟类:

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 类中定义它来设置它的物理体,使用 self.physicsBody = ...,但这给了我一个错误,以及在 init 函数中以相同的方式设置它,所以我没有将其包含在代码中。

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

欢迎任何帮助或建议!

【问题讨论】:

    标签: xcode swift swift2 xcode7


    【解决方案1】:

    您是否尝试在调用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() 中首先做了什么,但也许是这样。

    【讨论】:

    • 有效!正如你所建议的,它不起作用,因为我是在初始化之前设置的,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多