1

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

  • 根据选择的精灵计算的中心点旋转选定精灵的位置(即,如果选择的精灵已经在圆形编队中,并且用户旋转编队,则每个精灵的位置都应旋转并保持圆圈。

  • 再次缩放选定精灵的位置,该中心点是根据选择的精灵计算的中心点(即,如果选定的精灵处于圆形阵型并且用户缩放阵型,则圆应该相应地变大或变小

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

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

4

1 回答 1

3

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

  1. 创建容器 SKNode
  2. 创建一个 SKNode ,将其命名为 spriteGroup 或类似的名称,并添加您想要以您描述的方式连接到该节点的任何精灵。
  3. 将 spriteGroup 添加到 containerNode。
  4. 将 spriteGroup 居中于容器节点的 0,0 位置。例如,如果 spriteGroup 的宽度是 100 并且它的高度是 100 ,你会希望它的位置是 -50,-50。

现在您可以旋转/缩放/移动容器并实现所需的功能。

这是一个例子:

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;
于 2013-11-13T23:50:52.313 回答