我有一个从SKNode继承的自定义类,并希望在该类上实现SKSpriteNode的类似锚点的功能。具体来说,我试图实现的是自动在父节点(anchorPoint为0.5,0.5)中对自定义节点进行居中,而不必将其宽度/高度偏移一半。
有小费吗?
编辑:我首先创建了一个anchorPoint变量,然后重写了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
}
}发布于 2015-04-08 06:33:38
您可以遍历继承类的setPosition函数。在这个函数中,您将对偏移量anchorPoint进行调整。
例如,如果您的sprite是100x100。您已经将它的锚设为(.5,.5),当有人设置位置时,您应该从它中添加或减去sprite维度,然后设置位置。在本例中,如果用户将sprite位置设置为(0,0),则将添加(100*.5,100*5)= (50,50)。加(0,0)为(50,50)。
这是你应该设置的新位置。
发布于 2015-12-03 03:36:51
在控件的SKNode下添加一个新的“根”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)
}
}https://stackoverflow.com/questions/29507027
复制相似问题