编辑 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 自定义类的属性?的主要内容,如果未能解决你的问题,请参考以下文章