2016-04-17 41 views
2

我有點失落,想找一種方法讓我的分數數字看起來像飛揚的鳥數字。我準備好了每個號碼的所有圖像,但不知道如何操作。用自定義編號替換數字SpriteKit

var scoreLabel: SKLabelNode! 


override init(size: CGSize){ 
    super.init(size: size) 

    GameHandler.sharedInstance.score = 0 


    scorelabelhud() 
} 

func scorelabelhud() { 
    scoreLabel = SKLabelNode(fontNamed: "bubblefont.ttf") 
    scoreLabel.fontSize = 80 
    scoreLabel.fontColor = SKColor.blackColor() 
    scoreLabel.position = CGPoint(x: self.size.width/2, y: self.size.height-110) 

    scoreLabel.text = "0" 
    self.addChild(scoreLabel) 
} 

a busy cat !【二布偶] [1]

回答

2

第一件事情,你不能在這裏使用SKLabelNode。我的意思是,你可以創建自定義字體然後使用它,但顯然,你只有每個數字的圖像。因此,創建您的號碼地圖集並將您的紋理命名爲[email protected][email protected] ... [email protected]

然後創建一個名爲textures的屬性來存儲每個數字的紋理。 下一步就是將某個數字分成數字。意味着將數字230拆分爲數字2,3和0.稍後,根據每個數字,您將創建一個SKSpriteNode,並使用相應的值並相應地定位它。

這裏是一個可以給你一個起點的例子:

import SpriteKit 

class GameScene: SKScene{ 

    var textures:[SKTexture] = [] 

    override func didMoveToView(view: SKView) { 

     let atlas = SKTextureAtlas(named: "numbers") 

     for i in 0...9 {textures.append(atlas.textureNamed("\(i)"))} 

     createSprites(fromNumber: 230) 

    } 

    func createSprites(fromNumber number:Int){ 

     //Create an array of digits (of type Int) 
     //flatMap will return an array containing the non-nil results of mapping 
     let digits = String(number).characters.flatMap { Int(String($0)) } 

     var i = 0 
     for number in digits { 

      if let sprite = createSprite(fromNumber: number) { 

       //Do your positioning stuff here. I just placed nodes at the center of the screen 
       sprite.position = CGPoint(x:frame.midX, y:frame.midY) 
       sprite.position.x += CGFloat(i++) * sprite.size.width 

       addChild(sprite) 
      } 
     } 
    } 

    func createSprite(fromNumber number:Int)->SKSpriteNode? { 
     //Check if number is in allowed range (0 - 9) 
     guard 0...9 ~= number else { return nil} 

     //You can setup your sprite here instead of just returning it 

     return SKSpriteNode(texture: textures[number]) 

    } 
} 

我假定場景的大小與你的觀點相同,所以如果是這樣的話,你可以複製/粘貼此代碼並運行它以查看它是如何工作的(它將使三個單獨的SKSpriteNodes和編號230形成)。

+0

讓我工作了一段時間,直到我看到多個像22一樣的相同數字設置相互位置相同的位置。你知道如何解決這個問題嗎?謝謝 – rkoi95

+0

@ rkoi95由於indexOf方法的工作原理(它返回第一個與給定值相等的值的索引...),這是有意義的。檢查編輯。 – Whirlwind

+0

看起來不錯,謝謝!還試圖讓數字在屏幕中間居中。因爲每次添加數字(1,10,100)都不會使精靈居中。讓圖像支架是屏幕的邊緣: (100)這就是我想要的樣子。這就是它的樣子(100)。 我試圖移動定位點沒有任何運氣。你怎麼看?謝謝 – rkoi95