根据中心点旋转并缩放几个精灵的位置?

时间:2013-11-13 21:37:37

标签: rotation position scale sprite-kit skspritenode

我正在寻找一些指导,因为我没有找到有关该主题的文档或主题。我的场景中有很多spritenodes,用户可以随意拖动。 另外,我需要用户能够选择多个精灵和

  • 根据中心点旋转所选精灵的位置 根据选择的精灵计算(即,如果精灵 被选中的已经是圈形式和用户 旋转形成,每个精灵的位置应旋转和 保持圈子。

  • 再次根据中心缩放所选精灵的位置 根据选择的精灵计算得到的点(即,如果是 选定的精灵呈圆形,用户缩放 形成时,圆圈应相应地变大或变小

我还需要处理其他事件,但这应该让我开始。我已经在维护选择哪些精灵并改变它们的位置(单个精灵和多个精灵)。我不知道如何旋转和扩展他们的位置。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

这是一种不同的方法,但你可以做的是:

  1. 创建容器SKNode
  2. 创建一个SKNode,将其称为spriteGroup或类似的东西,然后以您描述的方式将要连接的任何精灵添加到该节点。
  3. 将spriteGroup添加到containerNode。
  4. 将spriteGroup置于容器节点的0,0位置。例如,如果spriteGroup的宽度为100且高度为100,则您希望它的位置为-50,-50。
  5. 现在您可以旋转/缩放/移动容器并实现所需的功能。

    以下是一个例子:

    SKNode *container = [[SKNode alloc]init];
    SKNode *group = [[SKNode alloc]init];
    
    for (int index = 0;index < 4;index++)
    {
        SKSpriteNode *sprite = [[SKSpriteNode alloc]initWithImageNamed:@"santa.png"];
        sprite.anchorPoint = CGPointMake(0, 0);
        sprite.position = CGPointMake(index * 100, 0);
        [group addChild:sprite];
    }
    
    CGRect groupRect = [group calculateAccumulatedFrame];
    group.position = CGPointMake(-groupRect.size.width/2, -groupRect.size.height/2);
    
    [container addChild:group];
    [self addChild:container];
    
    container.position = CGPointMake(512, 384);
    container.xScale = .5;
    container.yScale = .5;
    
    container.zRotation = 45 * M_PI /180;