2013-10-28 22 views
0

我如何將兩個SKSpriteNodes分組在一起,以便我可以將它們旋轉爲好像它們一樣?假設一個SKSpriteNode是一根繩子,另一個是連接到繩索末端的一個球。我怎樣才能讓它看起來像他們一起擺動? SKAction會做什麼?如何將兩個SKSpriteNodes z一起旋轉?

回答

4

兩個選項:

  1. 把兩者在SKNode和旋轉SKNode(圍繞一定的錨點)

    SKNode *container = [[SKNode alloc] init]; 
    [container addChild:ballSprite]; 
    [container addChild:ropeSprite]; 
    container.zRotation = someValue; 
    
  2. 或單獨旋轉並把它們移動它們,因此看起來好像他們一起旋轉。

+0

你能後的一個例子如何嵌套兩個SKSpriteNodes成一個SKNode? – blueicecream

+0

已更新的答案。您當然必須更新球和繩索的位置,因爲現在您必須在容器節點的座標空間中定義它們。 – DrummerB

+0

如何修改定位點? – Gujamin

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建議