我有一个继承自SKNode的自定义类,并希望在该类上实现SKSpriteNode类似anchorPoint的功能。具体来说,我想要实现的是自动将自定义节点置于父节点中(anchorPoint为0.5,0.5),而不必将其偏移一半的宽度/高度。
任何提示?
编辑:我最后创建了一个anchorPoint变量,然后覆盖了位置变量,并设置了由anchorPoint修改的超级位置。
var anchorPoint = CGPoint(x: 0.5, y: 0.5)
override var position: CGPoint {
set {
super.position = CGPoint(x: self.position.x - self.size.width * self.anchorPoint.x, y: self.position.y - self.size.height * self.anchorPoint.y)
}
get {
return super.position
}
}
答案 0 :(得分:3)
您可以覆盖继承类的setPosition
函数。在此功能中,您将调整偏移的anchorPoint。
例如,如果你的精灵是100x100。并且您已将其锚点设置为(.5,.5),当有人设置位置时,您应该从中添加或减去精灵尺寸,然后设置位置。 在这种情况下,如果用户将精灵位置设置为(0,0),则应添加(100 * .5,100 * .5)=(50,50)。向它添加(0,0)将是(50,50)。
这是您应该设置的新职位。
答案 1 :(得分:1)
在您的控件的SKNode下添加新的“root”SKNode可能更容易,向其添加任何子节点,然后在更改anchorPoint属性时移动它。这就是我所做的。
var anchorPoint: CGPoint = CGPoint( x: 0.5, y: 0.5 )
{
didSet
{
let translateX = ( anchorPoint.x - 0.5 ) * controlSize.width
let translateY = ( anchorPoint.y - 0.5 ) * controlSize.height
rootNode!.position = CGPoint(x: translateX, y: translateY)
}
}