2015-02-23 3 views
1

В моей игре мне нужна метка с одним символом с фоном и рамкой. Для достижения этой цели я создал этот код с SKLabelNode, SKShapeNode и SKSpriteNode:Каков наилучший способ перемещения o сбор узлов?

override func didMoveToView(view: SKView) { 

     let label = SKLabelNode(fontNamed:"AmericanTypewriter-CondensedBold") 
     label.text = "H"; 
     label.fontColor = UIColor.blackColor() 
     label.fontSize = 120; 
     label.userInteractionEnabled = false 

     let background = SKSpriteNode(color: UIColor(red: 255, green: 255, blue: 255, alpha: 0.4), size: CGSizeMake(label.frame.size.width*1.2, label.frame.size.height*1.2)) 
     background.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame)) 
     background.name = "bkg" 
     background.addChild(label) 
     label.position = CGPoint(x:0, y:-label.frame.size.height/2) 

     let border = SKShapeNode(path: CGPathCreateWithRect(CGRectMake(-(background.frame.size.width/2), -(background.frame.size.height/2), background.frame.size.width, background.frame.size.height), nil)) 
     border.fillColor = UIColor.clearColor() 
     border.strokeColor = UIColor.blackColor() 
     border.lineWidth = 5.0 
     border.userInteractionEnabled = false 
     background.addChild(border) 


     self.addChild(background) 



    } 

Я выглядит следующим образом:

enter image description here

Тогда мне нужно переместить эту коллекцию узлов. Я попытался добиться этого таким образом:

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { 
     for touch in touches { 
      let location = touch.locationInNode(self) 
      let touchedNode = nodeAtPoint(location) 

      if touchedNode.name == "bkg" { 
       touchedNode.position = location 
      } 
     } 
    } 

Но он не двигается плавно, и на это трудно нажимать.

Я не знаю, могу ли я изменить способ создания метки (с 3 узлами) или изменить способ, которым я пытался ее переместить.

Есть ли лучший способ перемещения коллекции узлов?

+0

То, как вы строите, кажется достаточно хорошим. Я думаю, проблема в том, как вы перемещаете backgroundNode. – ZeMoon

ответ

2

Если вы добавите все узлы в единственный родительский узел , вы можете переместить этот родительский узел, а затем все три из ваших существующих узлов тоже будут перемещаться.

+0

Спасибо за ответ Cal. Как я могу это сделать ? Должен ли я подклассифицировать узел и поместить все вещи в этот новый класс? – Sebastian

+0

Я считаю, что вы можете добавить дочерний узел в любой другой узел в SpriteKit. Попробуйте создать общий «SKNode», а затем добавьте эти узлы в качестве дочерних, используя «parent.addChild (child)». –

Смежные вопросы