0

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

4

2 回答 2

4

两种选择:

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

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

于 2013-10-28T17:50:25.893 回答
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 的建议进行旋转

于 2013-10-29T00:55:34.577 回答