如何仅旋转父SKSpriteNode而不是子节点

时间:2014-12-19 18:24:02

标签: sprite-kit

我的SKSpriteNode有一个孩子SKSpriteNode。当我旋转父节点(使用SKAction rotateByAngle)时,子节点也会旋转。我尝试了很多事情(将孩子的zRotation设置为0,设置allowsRotation=NO,甚至在didSimulatePhysics中执行这些操作),但孩子仍然与父母一起轮换。我该如何防止这种情况?

2 个答案:

答案 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
}