如何将两个SKSpriteNode一起z旋转,就好像一个?

时间:2013-10-28 17:48:14

标签: objective-c sprite-kit skaction

如何将两个SKSpriteNode组合在一起,以便我可以像对待它们一样对它们进行z旋转?假设一个SKSpriteNode是一根绳子,另一个是连接在绳子末端的球。我怎么能让它看起来像是在一起摆动? SKAction会做什么?

2 个答案:

答案 0 :(得分:4)

两个选项:

  1. 将它们放在SKNode中并旋转SKNode(围绕某个锚点)

    SKNode *container = [[SKNode alloc] init];
    [container addChild:ballSprite];
    [container addChild:ropeSprite];
    container.zRotation = someValue;
    
  2. 或者单独旋转它们并将它们移动,使它看起来好像是一起旋转的。

答案 1 :(得分:0)

可能不是最优雅的解决方案,但这里是我如何将SKSpriteNodes添加到SKNode(容器)。 containerArray包含应添加的节点。 newSpriteName(NSString)用于决定精灵是否显示正面或背面。

// Add a container
_containerNode = [SKNode node]; 
_containerNode.position = _theParentNodePosition;
_containerNode.name = @"containerNode";
[_background addChild:_containerNode];

for (SKNode *aNode in containerArray) {

        if (![aNode.name isEqualToString:@"background"] && ![aNode.name isEqualToString:@"title1"] && ![aNode.name isEqualToString:@"title2"]) {
            // Check if "back" sprite should be added or the front face
            if ([[aNode.name substringFromIndex:[aNode.name length] - 1] isEqualToString:@"b"]) {
                newSpriteName = @"back";
            } else {
                newSpriteName = aNode.name;
            }

            // Prepare the new node
            SKSpriteNode *newNode = [SKSpriteNode spriteNodeWithImageNamed:newSpriteName];
            newNode.name = aNode.name;
            newNode.zPosition = aNode.zPosition;
            newNode.position = CGPointMake(aNode.position.x - _theParentNodePosition.x, aNode.position.y - _theParentNodePosition.y);

            // Delete the old node
            SKNode *deleteNode = [_background childNodeWithName:aNode.name];
            [deleteNode removeFromParent];

            // Add the new node
            [_containerNode addChild:newNode];
        }
    }

然后像DrummerB建议的那样进行轮换