まず最初、あなたはここで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が形成されます)。
私は、22のように同じ数字を掛け合わせると、同じ場所に同じ位置に設定されるまで、しばらく働いていました。あなたはこれを修正する方法を知っていますか?ありがとうございます – rkoi95
@ rkoi95ああ、 'indexOf'メソッドがどのように機能するのかが分かります(指定された値と等しい最初の値のインデックスを返します...)。 – Whirlwind
いいですね、ありがとう!また、画面の中央に数字を中央に表示しようとしました。番号が追加されるたびに(1,10,100)、スプライトを中央に配置しないためです。括弧は画面の端であるimagenにします。 (100)これは私がそれが欲しい方法です。これは見た目です(100)。 幸運にもアンカーポイントを動かそうとしました。どう思いますか?ありがとうございました – rkoi95