如何使子节点对父节点旋转无效?

时间:2015-12-14 14:44:18

标签: ios sprite-kit skspritenode skemitternode

我正在尝试将SKEmitterNode作为一个孩子添加到球SKSpriteNode。但同时,我是rotating我的球节点。但问题是,球节点的旋转导致发射器节点旋转(因为发射器节点是子节点到球节点)。有什么我可以做的不旋转发射器节点,但旋转球节点?

我将球节点添加为:

SKSpriteNode * ball = [SKSpriteNode spriteNodeWithImageNamed:imageName];
ball.name=name;
ball.size=size;
ball.anchorPoint=CGPointMake(0, 0);

[self addChild:ball];

我将发射器节点添加为:

 SKEmitterNode *burstEmitter =
 [NSKeyedUnarchiver unarchiveObjectWithFile:_emitterNodePath];
 [ball addChild:burstEmitter];

当球击中墙壁时,我正在转动球:

-(void)didBeginContact:(SKPhysicsContact *)contact
{

  SKSpriteNode * firstNode = (SKSpriteNode*)contact.bodyA.node;
  SKSpriteNode *  secondNode = (SKSpriteNode *)contact.bodyB.node;
  if (firstNode.physicsBody .categoryBitMask == wallHitCategory ||  secondNode.physicsBody.categoryBitMask == wallHitCategory) {

        NSLog(@"first sound and then rotate ball");
        [self runAction:[SKAction playSoundFileNamed:@"basketBall bounce.WAV" waitForCompletion:NO]];
        secondNode.anchorPoint=CGPointMake(0.5, 0.5);
            [secondNode runAction:[SKAction rotateByAngle:degToRad(180.0f) duration:3.0]];

    }
}

是否可以旋转父节点而不是其子节点?

2 个答案:

答案 0 :(得分:2)

您可以在父节点的相反方向旋转子节点,然后它可能会非常平滑,以至于眼睛不会看到更改, 至于另一种方法,也许pinJoint可以帮助

SeanG的评论也很好!我更喜欢这个解决方案 因为它似乎是更好的CPU性能 - 明智!

将一个不可见节点作为球和发射器节点的父节点,然后当您旋转球发射器节点时,不会受到旋转的影响。

  • 希望它有用

答案 1 :(得分:2)

我发布我的评论作为答案,因为听起来似乎没有理由它不起作用。

我个人会创建一个主节点,发射器和精灵节点都是子节点。如果您只是添加子节点,则父节点将实际上不可见。然后,您可以将父节点作为一个整体移动,但可以单独旋转各个子节点。