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



我小时候正试图将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]];
    }
}

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

您可以将子节点旋转到与父节点相反的方向,然后它可能会足够平滑,眼睛不会看到变化,至于另一种方法,也许pinJoint可以帮助

SeanG的评论也很好!我更喜欢这种解决方案因为它似乎在cpu性能方面更好!

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

  • 希望有帮助

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

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

最新更新