我的SKSpriteNode
有一个孩子SKSpriteNode
。当我旋转父节点(使用SKAction
rotateByAngle
)时,子节点也会旋转。我尝试了很多事情(将孩子的zRotation
设置为0,设置allowsRotation=NO
,甚至在didSimulatePhysics
中执行这些操作),但孩子仍然与父母一起轮换。我该如何防止这种情况?
答案 0 :(得分:5)
很简单:
node.parent.rotation = 90;
node.rotation = -90;
基本上只是将孩子的旋转设置为父旋转的倒数。
答案 1 :(得分:0)
如果子节点的位置为(0,0),则只需调整其旋转。如果孩子不在原点,则需要调整其位置和旋转以考虑其父级的轮换。这是一个如何做到这一点的例子(在Swift中):
计算并存储子项相对于其父项的角度和半径
let dx = child.position.x
let dy = child.position.y
childAngle = atan2(dy, dx)
childRadius = sqrt(dx*dx+dy*dy)
调整孩子的位置/旋转以抵消父母的旋转。这应该在评估所有操作后执行。
override func didEvaluateActions() {
let angle = node.zRotation
let angleOffset = -angle + childAngle
let x = childRadius * cos(angleOffset)
let y = childRadius * sin(angleOffset)
child.position = CGPointMake(x, y)
child.zRotation = -angle
}