首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在anchorPoint子类中实现SKNode

在anchorPoint子类中实现SKNode
EN

Stack Overflow用户
提问于 2015-04-08 05:57:58
回答 2查看 2.6K关注 0票数 6

我有一个从SKNode继承的自定义类,并希望在该类上实现SKSpriteNode的类似锚点的功能。具体来说,我试图实现的是自动在父节点(anchorPoint为0.5,0.5)中对自定义节点进行居中,而不必将其宽度/高度偏移一半。

有小费吗?

编辑:我首先创建了一个anchorPoint变量,然后重写了anchorPoint变量,并设置了由anchorPoint修改的超级位置。

代码语言:javascript
复制
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
    }
}
EN

回答 2

Stack Overflow用户

发布于 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)。

这是你应该设置的新位置。

票数 3
EN

Stack Overflow用户

发布于 2015-12-03 03:36:51

在控件的SKNode下添加一个新的“根”SKNode,向其添加任何子节点,然后在更改anchorPoint属性时将其移动,可能会更容易。我就是这么做的。

代码语言:javascript
复制
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)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29507027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档