1

このトピックに関するドキュメントやスレッドが見つからないため、ガイダンスを探しています。シーンには、ユーザーが自由にドラッグできる多数のスプライトノードがあります。さらに、ユーザーが複数のスプライトを選択できるようにする必要があります。

  • どのスプライトが選択されたかに基づいて計算された中心点に基づいて、選択されたスプライトの位置を回転します (つまり、選択されたスプライトがすでに円のフォーメーションにあり、ユーザーがそのフォーメーションを回転させた場合、各スプライトの位置は回転し、円を維持する必要があります)。サークル。

  • 選択されたスプライトに基づいて計算された中心点に基づいて、選択されたスプライトの位置をスケーリングします (つまり、選択されたスプライトが円のフォーメーションにあり、ユーザーがフォーメーションをスケーリングした場合、円はそれに応じて大きくまたは小さくなります)。

他にも処理する必要があるイベントがありますが、これで始められるはずです。どのスプライトが選択されているかを維持し、それらの位置を変更しています (単一のスプライトと複数のスプライト)。それらの位置を回転およびスケーリングする方法について途方に暮れています。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

3

これは別のアプローチですが、できることは次のとおりです。

  1. コンテナー SKNode を作成する
  2. SKNode を作成し、それを spriteGroup などと呼び、説明した方法で接続したいスプライトをそのノードに追加します。
  3. spriteGroup を containerNode に追加します。
  4. コンテナ ノードの位置 0,0 に spriteGroup を配置します。たとえば、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 に答える