2016-04-17 7 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 ![2つのマペット] [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]) 

    } 
} 

私はあなたのシーンがあなたのビューと同じサイズを持っているので、その場合は、あなたが/これを貼り付けるだけでコピーできると仮定しましたコードを実行してどのように動作するかを確認してください(3つの別々のSKSpriteNodesが作成され、番号230が形成されます)。

+0

私は、22のように同じ数字を掛け合わせると、同じ場所に同じ位置に設定されるまで、しばらく働いていました。あなたはこれを修正する方法を知っていますか?ありがとうございます – rkoi95

+0

@ rkoi95ああ、 'indexOf'メソッドがどのように機能するのかが分かります(指定された値と等しい最初の値のインデックスを返します...)。 – Whirlwind

+0

いいですね、ありがとう!また、画面の中央に数字を中央に表示しようとしました。番号が追加されるたびに(1,10,100)、スプライトを中央に配置しないためです。括弧は画面の端であるimagenにします。 (100)これは私がそれが欲しい方法です。これは見た目です(100)。 幸運にもアンカーポイントを動かそうとしました。どう思いますか?ありがとうございました – rkoi95

関連する問題