如何将两个 SKSpriteNode 像一个节点一样 z 旋转



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

两个选项:

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

    SKNode *container = [[SKNode alloc] init];
    [container addChild:ballSprite];
    [container addChild:ropeSprite];
    container.zRotation = someValue;
    
  2. 或者单独旋转它们,它们会移动它们,这样看起来就像它们一起旋转一样。

可能不是最优雅的解决方案,但这是我如何将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];
        }
    }

然后按照鼓手B的建议进行轮换

相关内容

最新更新