2017-04-14 12 views
0

私はiosアプリケーションを開発しています。私は画面上にSKSpriteNodeを持っており、私はSKTextureとして保存しているユーザーから図面を取得しています。私はこれら2つを組み合わせて新しいSKSpriteNodeとして紹介したいと思います。Sweet 3で新しいSKSpriteNodeを形成するためにSKSpriteNodeをSKTextureにマージするには?

問題:SKSpriteNodeをSKTextureにマージする方法に関するドキュメントが見つかりません。私はこれを行う方法があると確信しています。誰かがこれのためのサンプルコードを持っていますか?

答えて

0

これを行うには、おそらくCoreGraphicsを使用する必要があります。 SKTexture.cgImage()メソッドを使用してSKTexturesCGImageに変換し、CoreGraphicsを使用してそれらを結合し、結果から新しいテクスチャを作成します。 SKTexture.init(cgImage:)メソッドを使用すると、CGImageオブジェクトを使用してテクスチャを構築できます。

私はCore Graphicsをあまり使用していませんが、関連する読み込みへのリンクがいくつかあります。私は、CGLayerクラスを使用して、CoreGraphicsにテクスチャのスタック方法を伝え、時間の経過とともにスプライトテクスチャを再利用するようにしたいと考えています。

Core Graphicsは、Quartz 2Dを使用して高速2Dグラフィックス操作を実行します。私はそれを多用していないが、あなたが探しているものでなければならないと思う。関連

  • コアグラフィックス:

    参照:

    私は投稿してください、私はそれは非常に興味深いことだと思います!

    EDIT 1: またスプライトでSKMutableTextureを使用する必要があります。そのクラスは、テクスチャデータを動的に変更することを可能にする。

  • 0

    「マージ」とは何を意味するのかよくわかりません。既存SKTextureを使用して新しいSKSpriteNodeを作成したい場合、これはあなたが探しているコードであってもよい:

    let newSprite = SKSpriteNode(texture: yourSKTexture) 
    
    +0

    私は新しい 'SKTexture'を既存の' SKSpriteNode'と組み合わせたいので、基本的に2つのテクスチャを1つにまとめる必要があります。 – user594883

    +0

    新しいSKTextureで新しいSKSpriteNodeを作成し、そのスプライトノードを既存のスプライトノードの子として追加することがあります。 2つのtexutureをどのように組み合わせるかによって、zポジション、アルファ、ブレンドファクタなどを設定する必要があります。これがあなたが探している効果であるかどうかは不明です。他の誰かが何か良いことを示唆するかもしれません。 – JohnV

    +0

    効果は同じですが、ゲームシーン中に複数回nodetreeを繰り返しています。別のSKSpriteNodesとしてテクスチャを追加すると、コストが高くなります。あなたの提案をありがとう! – user594883

    1

    あなたが使用して、2つのスプライトを保持し、それからテクスチャを作成するコンテナを使用することができますこのようなSKViewのtexture(from:)方法、:

    override func didMove(to view: SKView) { 
    
         backgroundColor = .black 
    
         let container = SKNode() 
    
         let left = SKSpriteNode(color: .purple, size: CGSize(width: 100, height: 100)) 
         let right = SKSpriteNode(color: .yellow, size: CGSize(width: 100, height: 100)) 
    
         container.addChild(left) 
         container.addChild(right) 
    
         left.position.x = 50 
         right.position.x = -50 
    
         addChild(container) 
    
         if let texture = view.texture(from: container) { 
          let sprite = SKSpriteNode(texture:texture) 
          addChild(sprite) 
          sprite.run(SKAction.moveTo(y: 300, duration: 5)) 
         } 
    
        } 
    

    あなたはノードの内容の一部からテクスチャを作成したい場合は、あなたがSKViewのtexture(from:crop:)メソッドを使用して、いくつかのトリミングを行うことができます。

    +0

    私が正しく理解すれば、動作する前にこれをシーンに追加する必要がありますか?私はそれをしたいとは思わない。 – user594883

    +0

    @ user594883既にスプライトを使用している場合は、すでにスプライトがシーンに追加されていると思っていました。なぜ彼らはシーンの一部ではない場合は、それらを使用していますか? – Whirlwind

    関連する問題