我有 SKShapeNode 具有多个 SKSpriteNodes 作为其子元素,围绕其中心在不同的地方放置。我也旋转,SKShapeNode,实际上旋转其所有子项。然而,当我循环遍历所有的那些子元素,他们的帧的位置上画圆,他们是所有绘制在屏幕 (由一个大的距离,从地方实际绘制子画面抵消) 的左下角。
let Circle = SKShapeNode(circleOfRadius: 110)
Circle.position = CGPointMake(0, 0)
Circle.name = "maincircle"
var tmpNode: SKSpriteNode
tmpNode = SKSpriteNode(imageNamed: fallingObjects[0])
tmpNode.name = "blue_hvat"
tmpNode.setScale(0.1)
tmpNode.position = CGPointMake(0, 80)
Circle.addChild(tmpNode)
tmpNode = SKSpriteNode(imageNamed: fallingObjects[1])
tmpNode.name = "green_hvat"
tmpNode.setScale(0.1)
tmpNode.position = CGPointMake(0, -80)
Circle.addChild(tmpNode)
...
self.addChild(Circle)
...
guard let obj = self.childNodeWithName("maincircle") else {
return
}
for l in (obj.children) {
//here when I use l.frame I get the wrong location of those sprites
continue
}
我浏览计算器,发现类似的问题,但是没有一个人帮助我。我将感谢任何帮助。谢谢你 !
您的对象的所有子级的 x 位置为 0。所以当你试图在他们图文框的位置画圆圈,他们绘制在屏幕的左下角,这是正常的因为在 SpriteKit,在屏幕的起源是左下的角,因为对象的所有帧都都与他们的父母。
所以,如果你有一些家长,有 x position
的 250
,和里面这位家长,你有一个节点与 x position
的 0
,此子节点的位置是有关他的父母,但有关屏幕的 250 0。
如果你想要得到相关的儿童的屏幕位置到你 obj
节点,我建议你继续像这样为例︰
l.frame.origin.x + obj.frame.origin.x
l.frame.origin.y + obj.frame.origin.y