2016-09-11 7 views
2

私は基本的にシングルフォントでカスタムフォント番号(画像付き)を追加してSpriteKitで自分のスコアに追加したいと思っています。スウィフトでSpriteKitのスコアとしてSKLabelNodeにカスタムの数字画像を追加

これは、彼らが0から9

に番号でフォント画像スタイル

Number 9

である私はしばらくの間、これを理解しようとしています。

SKLabelNodeに追加できるかどうか、またはクラスで作成する必要があるかどうかはわかりません。

答えて

1

SKLabelNodeは、ビットマップフォントを許可しません。カスタムフォントがTTFの場合、SKLabelNodeでカスタムフォントを使用できます。説明はここにあります:SKlabelNode custom font

あなたの場合、ビットマップフォントを使用したいので、これを行うためにクラスを作成する必要があります。 SKNodeのいずれかをサブクラス化することができます。しかし、SKNodeを "ルート"として機能させ、次にあなたの番号の各数字をSKSpriteNode(これらは数字を表すルートノードの子ノードになります)にしたいと考えています。

あなたが決定したいことは、番号の整列(水平方向と垂直方向)をどのように扱いたいかということです。

私は独自のカスタムクラスを使用して以前に数値を描画していますが、通常は水平方向に調整可能(左揃え、右揃え、中央揃え)に設定できます。しかし、怠惰から、私は通常、常に垂直に中心を置きます。

これは複雑に聞こえるかもしれませんが、簡単に行うことができます。

  • 各桁にビットマップのテクスチャアトラスを割り当てる方法。彼らが0-9の進行を持っているなら、それは容易です 。
  • 数値を設定/取得する方法
  • の数値を個々の数字に変換する方法。 の数字をどの文字に割り当てるかを計算するには、これが必要です。
  • 数値の幅を計算する方法。 フォントがモノスペースの場合、これは簡単です。そうでない場合は、 の桁幅と文字間隔に基づいて幅を計算する必要があります。モノスペースフォントの場合は、文字間隔を考慮する必要があります。
  • 数値の高さを計算する方法。これは0-9と同じくらい簡単で、 はすべて同じ高さでなければなりません。
  • 既存のSKSpriteNodeと を削除する方法は、それぞれ新しい桁を追加します。各新しい桁は、整列に基づいて適切な量の によってオフセットされています。

あなたのカスタムクラスは、数値が設定されると、番号を表す正しいSKSpriteNodeを作成する必要があります。

SKTextureの配列をどのように使用するかに関する最後の質問の情報が更新されました。このコードはコンパイルのためにテストされておらず、単にあなたに良いアイデアを与えるためのものです。

// Example of storing digits in an array. Assumes you are putting this in an atlas and your 
// sub-texture names are 0, 1, etc. If not you'll have to adjust the code accordingly 
var numTextures = [SKTexture]() 
let numberAtlas = SKTextureAtlas(named: "NumberAtlas") 

for i in 0 ..< 10 { 
    numTextures.append(numberAtlas.textureNamed("\(i)")) 
} 

// To get the texture for a digit 

func textureForDigit(digit:Int) -> SKTexture { 
    return numTextures[digit] 
} 
+0

回答ありがとうございます。私はあなたの更新をすることができますように私はすぐにこれを試してみましょう。 – hka

+0

各桁のテクスチャアトラスを追加しましたが、数値を設定/取得するメソッドを追加するか、個々の数字に変換するとエラーが出ます(IntをSKTextureに変換することはできません)... – hka

+0

もちろんありません。それがアレイの目的です。 'SKTexture'の配列を作成します。ここで、0のインデックスは0を表し、1のインデックスは1を表します。 –

関連する問題