2016-05-09 1 views
1

Ich habe mich gefragt, ob es eine Möglichkeit gibt, ein Symbol neben einem SKLabelNode gesetzt (da ich SKAction verwenden müssen, um dieses Etikett nach oben zu verschieben) wie folgt aus:Embed-Symbol neben einem SKLabelNode

enter image description here

Alle fand ich darüber UILabel (here) oder ein GitHub Projekt (here) wurde mit, wo ich nicht mein Label verschieben oder prallen kann. (mit SpriteKit-Spring)

ich dachte, in einen Sprit-Knoten mit dem Symbolbild erstellen und es ist positio n neben der coinsLabel, aber da dieses Etikett als Münzzähler verwendet wird, würde es größer werden, wenn erhöht; und das Symbol würde überlagert werden.

Ich habe dieses Beispiel Projekt darunter leichter zu visualisieren (es ist nicht das Symbol hat, natürlich. Es nur ist Erhöhen und coinsLabel durch Tasten bewegen).

Wenn Sie möchten, können Sie es herunterladen here.

import SpriteKit 

class GameScene: SKScene { 

    //Declaration 
    var icon = SKSpriteNode() 
    var coins = Int() 
    var coinsLabel = SKLabelNode() 

    var incrementButton = SKSpriteNode() 

    //Setup 
    func setupIcon(){ 

     //icon 
     icon = SKSpriteNode(imageNamed: "icon") 
     icon.position = CGPoint(x: self.frame.width/1.45, y: self.frame.height/1.075) 
     icon.setScale(0.1) 
    } 
    func setupCoinsLabel(){ 

     //coinsLabel 
     coinsLabel.position = CGPoint(x: self.frame.width/150 - 300, y: 0) 
     coinsLabel.setScale(12.5) 
     coinsLabel.text = "0" 
    } 
    func setupIncrementButton(){ 

     //incrementButton 
     incrementButton = SKSpriteNode(imageNamed: "incrementButton") 
     incrementButton.position = CGPoint(x: self.frame.width/2, y: self.frame.height/3.15) 
     incrementButton.setScale(2.0) 
    } 

    override func didMoveToView(view: SKView) { 
     /* Setup your scene here */ 

     setupIcon() 
     addChild(icon) 

     setupCoinsLabel() 
     icon.addChild(coinsLabel) 

     setupIncrementButton() 
     addChild(incrementButton) 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     /* Called when a touch begins */ 

     //When touch buttons/screen 
     for touch in touches{ 

      let location = touch.locationInNode(self) 
      let node = nodeAtPoint(location) 

      //Increment 
      if node == incrementButton{ 

       coins += 1 
       coinsLabel.text = NSString(format: "%i", coins) as String 
       coinsLabel.position = CGPoint(x: self.frame.width/150 - coinsLabel.frame.width, y: 0) 
      } 
     } 
    } 
} 

Antwort

3

Nur eine SKSpriteNode machen, und fügen Sie es als Kind zum SKLabelNode, können Sie immer die Position des SKSpriteNode auf der rechten Seite des SKLabel zu sein, unabhängig davon, wie viele Stellen sind in Ihrem Etikett, würde so überlappende nie passieren

//Increment 
     if node == incrementButton{ 

      coins += 1 
      coinsLabel.text = NSString(format: "%i", coins) as String 
      icon.position = CGPoint(x: coinsLabel.frame.width/2, y: 0) 

     } 
+0

wenn ich versuche, das Symbol hinzuzufügen, ohne seine Position zu ändern, wird es überlappen 'coinLabel', aber wenn ich versuche Symbol Position neben coinLabel zu setzen, es wird nicht angezeigt. Ich weiß nicht warum. Ich habe den Beitrag mit dem neuen Code bearbeitet. – Luiz

+0

setze keine X-Position bei self.width/2, setze auf label.width/2, und setze dein y auf 0 – Knight0fDragon

+0

es wird jetzt angezeigt, aber wenn 'coinsLabel' mehr als 1 Ziffer hat, überlappt es das Symbol. Ich habe den Code bearbeitet. – Luiz