编辑 SKSpriteNode 自定义类的属性?

Posted

技术标签:

【中文标题】编辑 SKSpriteNode 自定义类的属性?【英文标题】:Editing properties of an SKSpriteNode custom class? 【发布时间】:2017-03-30 06:17:58 【问题描述】:

在我的自定义 SKSpriteNode 类中,我希望能够在自定义类中更改锚点、位置等属性,因此我不需要在其他地方更改。

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")
    

如何编辑其他属性?

【问题讨论】:

我真的不明白你需要做什么......如果你想改变一些属性,只需初始化你的精灵然后改变这些属性:最好将一些基本属性更改为它们所在的上下文是礼物,不在自定义类中。 【参考方案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 更加可见。调试一个您似乎没有设置节点位置或纹理等的程序将是有问题的。

【讨论】:

【参考方案2】:

另一种方法是创建一个协议并将其应用于您要继承的标准 SpriteKit 类(或其祖先)。

例如:

protocol CustomSKNode

    var position:CGFloat   get set 
    var zRotation:CGFloat  get set 
    // ...

extension SKNode: CustomSKNode 

一旦您在项目的某处完成此操作,您就可以访问任何自定义 SKNode 或 SKSpriteNode 上的这些属性,而无需导入 SpriteKit。

【讨论】:

以上是关于编辑 SKSpriteNode 自定义类的属性?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将 SKSpriteNode 添加到另一个类的场景中?

编辑器扩展基础3-自定义PropertyDrawer

如何在继承 SKSpritenode 的类中拥有图像

在 SKSpriteNode 中调用自定义方法不起作用

3-PropertyGrid绑定自定义类

将物理应用到自定义 SKSpriteNode 类