编辑SKSpriteNode自定义类的属性?

时间:2017-03-30 06:17:59

标签: swift swift3 sprite-kit swift-playground

在我的自定义SKSpriteNode类中,我希望能够在自定义类中更改诸如anchorPoint,posistion等属性,因此我不需要在其他地方。

import Foundation
import SpriteKit

open class Crank:SKSpriteNode {

init() {
    super.init(texture: SKTexture(imageNamed: "crank"), color:     
        NSColor.white, size: CGSize(width: 155.0, height: 188.0))

    }

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

我如何编辑其他属性?

2 个答案:

答案 0 :(得分:1)

import Foundation
import SpriteKit

class Crank: SKSpriteNode {

    init(imageNamed image: String, position at: CGPoint, withAnchor anchor: CGPoint) {

        super.init(imageNamed: image)
        self.position = position
        self.anchorPoint = anchor
    }

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

(从内存写入,因此可能包含小错误,但大致正确)。

然后在主代码中:

let myCrank = Crank(imageNamed: "Crank.png", at: CGPoint(300, 500), withAnchor: CGpointZero) 

尽管如此,亚历山德罗有一个观点。我认为设置标准'会更好。属性在正常的地方。

如果要在实际类中设置任何标准SKSpriteNode属性,那么我认为在初始化器中指定它们是一种很好的做法,因为它使m更加可见。调试一个你似乎没有设置节点位置或纹理等的程序会有问题。

答案 1 :(得分:0)

另一种方法是创建一个协议并将其应用于您正在子类化的标准SpriteKit类(或它们的祖先)。

例如:

dd($action);

在项目中的某个地方完成此操作后,您将能够在任何自定义SKNode或SKSpriteNode上访问这些属性,而无需导入SpriteKit。