2016-07-21 21 views
0

私はSpriteKitを初めて使いました。私の質問は、Web APIからスプライトシートをロードする方法です。SpriteKitのWeb APIからスプライトシートをロードする方法

現在のところ、APIにはすべてのスプライトシートを含む大きなPNG画像と個々のフレーム情報に関するjsonが返されています。

enter image description here

形式だけの大きな画像とのplist(XML)ファイルが含まれている.atlascフォルダを、好き:(ファイルとJSONをTexturePackerによって生成されている)APIは次のようになります。

イメージとplistファイルをダウンロードし、ディスクに保存して読み込むことを考えていました。ただし、SKTextureAtlas.init(named: String)はアプリのバンドルからのみ読み込むことができます。

実行時にWebからスプライトアニメーションを読み込みたいとします。

私はAPIを管理しているので、目標を達成するためにAPIを更新できます。以下のような私は考え出した方法はimageをダウンロードして

+0

拡張機能が存在する理由は、指定されたinitとしてSKTextureAtlas(dictionary:string:AnyObject)を使用することです – Knight0fDragon

+0

APIを個別の画像に戻す必要があり、それらをすべてダウンロードし、 'init(dictionary:[String:AnyObject])'で 'SKTextureAtlas'を初期化する必要がありますか? –

+0

いいえ、あなたは他のアトラス(テクスチャ・パッカー・アトラス)をダウンロードしてから、コードで個々のテクスチャを作成し、私が言った方法でそれらを配置します。 SkTextureでは、ラダーテクスチャからテクスチャを抽出することができるので、メインイメージをテクスチャとしてロードし、次にjsonに基づいて、個々のオブジェクトを抽出します – Knight0fDragon

答えて

0

sourceTextureを作成し、:let sourceTexture = SKTexture(image: image)

は、その後方法init(rect rect: CGRect, inTexture texture: SKTexture)

サンプル・コードで個々のテクスチャを作成するために、jsonframe情報を使用している:

var textures: [SKTexture] = [] 

    let sourceTexture = SKTexture(image: image) 
    for frame in spriteSheet.frames { 
     let rect = CGRect(x: frame.frame.origin.x/spriteSheet.size.width, 
          y: 1.0 - (frame.frame.size.height/spriteSheet.size.height) - (frame.frame.origin.y/spriteSheet.size.height), 
          width: frame.frame.size.width/spriteSheet.size.width, 
          height: frame.frame.size.height/spriteSheet.size.height) 
     let texture = SKTexture(rect: rect, inTexture: sourceTexture) 
     textures.append(texture) 
    } 
関連する問題