2017-04-14 52 views

回答

0

您可能不得不使用CoreGraphics來做到這一點。使用SKTexture.cgImage()方法將SKTextures轉換爲CGImage,使用CoreGraphics將它們合併,然後從結果中創建一個新紋理。 SKTexture.init(cgImage:)方法讓你使用CGImage對象來構造紋理。

我還沒有使用Core Graphics,但是這裏有幾個鏈接到相關的讀取。我想你會希望使用CGLayer類來告訴CoreGraphics如何堆疊紋理,並隨着時間的推移重用sprite紋理,這樣CoreGraphics可以緩存它以使速度更快。

Core Graphics使用Quartz 2D來做快速的2D圖形操作。我沒有玩過很多,但我認爲它應該是你正在尋找的東西。

參考文獻:

隨時通知我,我覺得這是很有趣!

編輯1: 你也必須在sprite上使用SKMutableTexture。該類允許動態更改紋理數據。

0

不確定你的意思是「合併」。如果要使用現有的SKTexture創建一個新的SKSpriteNode那麼這可能是你正在尋找的代碼:

let newSprite = SKSpriteNode(texture: yourSKTexture) 
+0

我想結合新的'SKTexture'和現有的'SKSpriteNode',所以我想我基本上需要將兩個紋理合併爲一個。 – user594883

+0

也許用新的SKTexture創建一個新的SKSpriteNode,並將該Sprite節點添加爲現有的Sprite節點的子節點。根據您希望如何合併兩種紋理,您可能需要設置z位置,alpha,混合因子等。不確定這是否會影響您所尋找的效果。也許別人可以提出更好的建議。 – JohnV

+0

效果會一樣,但我在遊戲場景中多次迭代我的nodetree。如果我將紋理添加爲單獨的SKSpriteNodes,則會很昂貴。儘管謝謝你的建議! – user594883

1

您可以使用一個容器,將舉行兩次精靈,並從它創建一個紋理,使用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

相關問題