在SKNode子类中实现anchorPoint

时间:2015-04-08 05:57:58

标签: swift sprite-kit

我有一个继承自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
    }
}

2 个答案:

答案 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)
    }
}
相关问题